【问题标题】:How can I show and pagination two queries in the laravel blade?如何在 laravel 刀片中显示和分页两个查询?
【发布时间】:2020-06-20 05:07:30
【问题描述】:

我想在刀片的表格中显示 $personnals$users。 我知道,我必须使用 @foreach。但我不能。因为,我有两个查询,我无法分页并显示它们。

$personnals = DB::table('orders')
            ->where('pay_type', 1)
            ->leftJoin('personnels', 'orders.personnel_id', '=', 'personnels.id')
            ->leftJoin('users', 'personnels.user_id', '=', 'users.id')
            ->select(['name AS personnelName', 'lastname AS personnelLastName'])
            ->get();

 $users = DB::table('orders')
        ->where('pay_type', 1)
        ->leftJoin('users', 'orders.user_id', '=', 'users.id')
        ->select(['name AS userName', 'lastname AS userLastName', 'orderCode'])
        ->get();

$personnals 有 100 个元素,$users 也有 100 个元素。每个元素都是一个数组。我想将这些数组合并在一起,得到一个包含 100 个数组元素的数组。

例如:我想要 $result 之类的东西:

$personnals = [ [ 'a'=>'blue', 'b'=>'red' ], [  'a'=>'green', 'b'=>'black' ] ];
$users = [ [ 'c'=>'yellow', 'd'=>'orange' ], [  'c'=>'white', 'd'=>'pink' ] ];

$result = [
            [ 'a'=>'blue', 'b'=>'red', 'c'=>'yellow', 'd'=>'orange' ] ,
            [  'a'=>'green', 'b'=>'black', 'c'=>'white', 'd'=>'pink' ]
        ];

如何通过分页在刀片中显示这些内容?

我可以在一个查询中显示所有内容吗?如何?

谢谢。

【问题讨论】:

  • 请阅读 Laravel 文档中有关 Laravel 查询构建器的分页功能:laravel.com/docs/7.x/pagination 您可能还想在这两个数组之间进行连接。您可以通过快速搜索 array_merge 函数找到如何操作。
  • 我有两个查询,我不能在刀片和 foreach 中一起显示这些。
  • 如果你将这两个数组连接成一个数组,你可以通过 foreach 展示那些使用 Blade 的人。
  • 是的。我使用 merge_array() ,但第二个数组在第一个数组之后合并,但我想合并在一起。
  • 您没有按照应有的方式使用array_merge 函数。请尝试以下代码:$data = array_merge($personnals, $users);,并在 @foreach 循环中使用新创建的变量 $data

标签: php mysql laravel query-builder laravel-query-builder


【解决方案1】:

你可以使用union

$personnals = DB::table('orders')
            ->where('pay_type', 1)
            ->leftJoin('personnels', 'orders.personnel_id', '=', 'personnels.id')
            ->leftJoin('users', 'personnels.user_id', '=', 'users.id')
            ->select(['name', 'lastname', 'orderCode']);


 $result = DB::table('orders')
        ->where('pay_type', 1)
        ->leftJoin('users', 'orders.user_id', '=', 'users.id')
        ->select(['name', 'lastname', 'orderCode'])
        ->union($personnals)
        ->get();

试试上面的!


由于您只需要 100 个结果而不是 200 个结果,因此您期望 join 而不是 union

 $result = DB::table('orders')
            ->where('pay_type', 1)
            ->leftJoin('personnels', 'orders.personnel_id', '=', 'personnels.id')
            ->leftJoin('users AS u1', 'personnels.user_id', '=', 'u1.id')
            ->leftJoin('users AS u2', 'orders.user_id', '=', 'u2.id')
           ->select(['u2.name AS userName', 'u2.lastname AS userLastName', 'orderCode', 'u1.name AS personnelName', 'u1.lastname AS personnelLastName'])
            ->get();

【讨论】:

  • Tnx。我从你的 cade 中使用,我只得到 5 个结果。我使用 unionAll 并得到 200 个结果。 $personnals 有 100 个元素,$users 也有 100 个元素。每个元素都是一个数组。我想将这些数组合并在一起,并拥有一个包含 100 个数组元素的数组。
  • 所以,只有 100 个结果,但是合并数据的基础是什么?
  • 例如:我想要类似 $result: $personnals = [ [ 'a'=>'blue', 'b'=>'red' ], [ 'a'=>'green ', 'b'=>'黑色' ] ]; $users = [ [ 'c'=>'yellow', 'd'=>'orange' ], [ 'c'=>'white', 'd'=>'pink' ] ]; $result = [ [ 'a'=>'blue', 'b'=>'red', 'c'=>'yellow', 'd'=>'orange' ] , [ 'a'=>'green ', 'b'=>'black', 'c'=>'white', 'd'=>'pink' ] ];
猜你喜欢
  • 2021-12-16
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多