我正在使用left join
根据公共列合并两个表,但我似乎丢失了左表中的主键id
。返回每个其他列
我的控制器:
$prod_manu = $request->prod_manu;
return $data = Product::leftJoin('manufacturers','products.Manufacturer_id','=','manufacturers.id')
->where('products.Manufacturer_id',$prod_manu)
->get();
产品型号:
class Product extends Model{
public function types(){
return $this->belongsTo('App\types','Type_id');
}
public function manufacturers(){
return $this->belongsTo('App\manufacturers','Manufacturer_id');
}
}
答案 0 :(得分:1)
这可能是因为Product
和manufacturers
都有id
列,因此其中一列会被覆盖。
您可以使用eloquent的with
方法,而不是使用左连接。
如果你有自己的关系和班级结构setup properly,你应该可以访问Manufacturer
这样的产品:
$manufacturer = Manufacturer::where('id', $prod_manu)->with('products')->get();
return $manufacturer->products;
另请注意,班级名称应始终为单数,并以laravel中的大写字母开头。 App\manufacturers
不应该有效。请阅读我上面提到的关于建立你雄辩关系的文章。