我正在try 用拉威尔联盟来实现一个结果.

[
 {
  warehouse_id: 12,
  warehouse_name: "new",
  wi_id: 19,
  wi_type: "storage",
  wi_name: "1",
  wr_id: 20,
  wr_name: "1",
  wb_id: 3,
  wb_name: "1",
  wp_id:null,
  wp_type:null,
  wp_location:null,
 },
 {
  warehouse_id: 12,
  warehouse_name: "new",
  wi_id: 19,
  wi_type: "storage",
  wi_name: "1",
  wr_id: 20,
  wr_name: "1",
  wb_id: 6,
  wb_name: "2",
  wp_id:"1",
  wp_type:"fixed",
  wp_location:"hellow",
 }
]

为了得到解决方案,我使用了两个查询并将它们合并在一起,我希望在一个查询中有结果,但没有运气...

$pickings = Warehouse::where('warehouses.id', $id)
            ->leftJoin('warehouse_pickings as wp', 'wp.warehouse_id', '=', 'warehouses.id')
            ->groupBy('wp.id')
            ->select(
                'wp.id as wp_id',
                'wp.type as wp_type',
                'wp.location as wp_location',
            );

$config = Warehouse::leftjoin('warehouse_isles as wi', 'wi.warehouse_id', '=', 'warehouses.id')
            ->leftjoin('warehouse_racks as wr', 'wr.warehouse_isle_id', '=', 'wi.id')
            ->leftJoin('warehouse_bins as wb', 'wb.warehouse_rack_id', '=', 'wr.id')
            ->where('warehouses.id', $id)
            ->groupBy('wb.id', 'wr.id', 'wi.id')
            ->select(
                'warehouses.id  as warehouse_id',
                'warehouses.name  as warehouse_name',
                'wi.id as wi_id',
                'wi.type as wi_type',
                'wi.name as wi_name',
                'wr.id as wr_id',
                'wr.name as wr_name',
                'wb.id as wb_id',
                'wb.name as wb_name',
            );
$query = $config->unionAll($pickings);
return $query->paginate(5);

我所犯的错误 SQLSTATE[21000]:违反基数:1222使用的SELECT语句具有不同的列数

任何帮助都将不胜感激.

谢谢

推荐答案

识别问题

您收到的错误是由于您的UNION语句中的两个查询没有相同的列数.当使用UNIONUNION ALL时,您必须确保这两个SELECT语句具有相同的列数,并且这些列也应该是类似的数据类型.

解释

看起来您正在try 将四个表联接在一起:WARESTORIES、WAREARY_PICKINGS、WARRAINE_ISLES、WARRAINS_RACKS和WAREARY_BINS.每个子查询中的SELECT条语句也应该具有相同的列数.但是在您的例子中,第二个子查询 Select 了9列,而第一个子查询只 Select 了3列.

您应该在第一个查询中添加缺少的列,并用NULL填充它们,以便它与第二个查询中的列相匹配.这样,您就是在欺骗系统,使其认为这两个子查询具有相同的 struct .

以下是如何实现这一点的方法:

$pickings = Warehouse::where('warehouses.id', $id)
            ->leftJoin('warehouse_pickings as wp', 'wp.warehouse_id', '=', 'warehouses.id')
            ->groupBy('wp.id')
            ->select(
                DB::raw('null as warehouse_id'),
                DB::raw('null as warehouse_name'),
                DB::raw('null as wi_id'),
                DB::raw('null as wi_type'),
                DB::raw('null as wi_name'),
                DB::raw('null as wr_id'),
                DB::raw('null as wr_name'),
                DB::raw('null as wb_id'),
                DB::raw('null as wb_name'),
                'wp.id as wp_id',
                'wp.type as wp_type',
                'wp.location as wp_location',
            );

$config = Warehouse::leftjoin('warehouse_isles as wi', 'wi.warehouse_id', '=', 'warehouses.id')
            ->leftjoin('warehouse_racks as wr', 'wr.warehouse_isle_id', '=', 'wi.id')
            ->leftJoin('warehouse_bins as wb', 'wb.warehouse_rack_id', '=', 'wr.id')
            ->where('warehouses.id', $id)
            ->groupBy('wb.id', 'wr.id', 'wi.id')
            ->select(
                'warehouses.id  as warehouse_id',
                'warehouses.name  as warehouse_name',
                'wi.id as wi_id',
                'wi.type as wi_type',
                'wi.name as wi_name',
                'wr.id as wr_id',
                'wr.name as wr_name',
                'wb.id as wb_id',
                'wb.name as wb_name',
                DB::raw('null as wp_id'),
                DB::raw('null as wp_type'),
                DB::raw('null as wp_location')
            );

$query = $config->unionAll($pickings);
return $query->paginate(5);

Laravel相关问答推荐

Nuxt 3获取多部分表单数据上传不起作用

在 React 中将属性从一个组件传递到另一个组件

无法使用 Dompdf Laravel 9 加载图像

未找到 apiResource 404 中的变量

Carbon现在时间错了

Laravel:Blade foreach 循环 bootstrap 列

如何修复无效请求(不支持的 SSL 请求)

Laravel 5.5 在迁移文件中设置整数字段的大小

在 Laravel 中下载后如何重定向?

调用未定义的函数 mb_strimwidth

在 Laravel 4 迁移中创建 MYSQL 过程

Laravel 5.2 身份验证不起作用

Laravel 5 - 为包创建 Artisan 命令

如何运行artisan命令计划:在托管服务器上运行? (Laravel )

在 Laravel 的数据透视表中添加 id 列有什么好处?

今天之前的 Laravel 规则......怎么办

[Vue 警告]:找不到元素:#app

如何在 Laravel 5 中验证 RESTful API?

Laravel or where

如果参数不是整数,如何以不同方式定义路由