首页 > 解决方案 > Laravel 列未找到:1054 未知列

问题描述

我需要获取用户出口的产品列表,但它返回此错误

SQLSTATE[42S22]: Column not found: 1054 Unknown column '1' in 'on clause' (SQL: select * from `barcodes` inner join `outlet_products` on `1` = `outlet_products`.`outlet_id

逻辑

仅获取用户出口的产品列表(不是所有出口的所有产品)

  1. 产品basically just name and description(有很多条码)
  2. 条码(属于产品,属于多网点)
  3. 出口(有许多条码)

代码

$user = $request->user();
$outlets = $user->outlets->pluck('id');

$products = Barcode::with('product', 'damages', 'outlet')
  ->join('outlet_products', function ($join) use($outlets) {
    $join->on($outlets, '=', 'outlet_products.outlet_id');
  })
  ->get();

Product model

public function barcodes()
{
    return $this->hasMany(Barcode::class, 'product_id', 'id');
}

Barcode model

public function product()
{
    return $this->belongsTo(Product::class);
}

public function outlet()
{
    return $this->belongsToMany(Outlet::class, 'outlet_products', 'barcode_id', 'outlet_id');
}

outlet model

public function barcodes()
{
    return $this->belongsToMany(Barcode::class, 'outlet_products', 'outlet_id', 'barcode_id');
}

奥特莱斯的产品实际上是通过条码退货的(奥特莱斯有很多条码,每个条码属于一个产品)。

任何想法?

更新

我对我的代码进行了一些更改,现在是这样的:

$products = Barcode::with('product', 'damages', 'outlet')
  ->join('outlet_users', 'outlet_users.user_id', '=', $user->id)
  ->join('outlet_products', 'outlet_products.outlet_id', '=',  'outlet_users.outlet_id')
  ->get();

现在它返回此错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column '4' in 'on clause' (SQL: select * from `barcodes` inner join `outlet_users` on `outlet_users`.`user_id` = `4` inner join `outlet_products` on `outlet_products`.`outlet_id` = `outlet_users`.`outlet_id`)

基本上通过这个新功能,我试图获取用户 outlet.id 并将其与条形码(产品)outlet.id 匹配。

标签: phplaravel

解决方案


你走错路了。如果要获取用户出口列表的产品列表

使用 product_id 更新您的出口模型。

在路上:

$user = $request->user();
$outlets = $user->outlets->pluck('id');

$products = Barcode::with('product','damages','outlet')
  ->whereHas('outlet', function ($q) use($outlets) {
    $q->whereIn('id',$outlets);
  })
  ->get();

推荐阅读