laravel 多关系查询
laravel multiple relation query
我的项目中有 3 个模型,我想得到一个查询或收集结果,正如我所说:
珠宝物品型号:
protected $table = 'jewel_items';
public function jewel(){
return $this->belongsTo('App\Models\Jewel');
}
public function sellInvoice(){
return $this->belongsTo(SellInvoice::class,'sell_invoice_id');
}
2.Jewel 型号:
public function jewelsItems(){
return $this->hasMany('App\Models\JewelsItem');
}
3.sellInvoice 型号:
protected $table = "sell_invoices";
public function jewelsItems(){
return $this->hasMany(JewelsItem::class,'buy_invoice_id');
}
查询: 我想获取所有没有销售发票且珠宝名称如 'something'.
的珠宝商品
注意: 珠宝模型有一个名称属性。我想将珠宝的名称添加到所有结果的第一个项目中。
我知道如何获得名称为 'something' 的所有珠宝:
Jewel::where('name','like','something'.'%')->get();
但我无法获取所有与其相关的 jewelItem,并在其中第一个中添加 jewel 名称。
要查找另一个关系中的条件,您可以使用 whereHas()
和 whereDoesntHave()
$name = 'something';
$items = JewelsItem::whereHas('jewel', function($query) use ($name) {
$query->where('name', 'LIKE', "%{$name}%");
})
->whereDoesntHave('sellInvoice')
->with('jewel')
->get();
内容如下:获取珠宝的名称字段中包含 $name 的珠宝物品
并且没有销售发票
然后将相关的珠宝添加到珠宝项目中。
当你想取回宝石的名称时,你可以像这样访问它的属性。
foreach($items as $item) {
echo $item->jewel->name;
}
我的项目中有 3 个模型,我想得到一个查询或收集结果,正如我所说:
珠宝物品型号:
protected $table = 'jewel_items'; public function jewel(){ return $this->belongsTo('App\Models\Jewel'); } public function sellInvoice(){ return $this->belongsTo(SellInvoice::class,'sell_invoice_id'); }
2.Jewel 型号:
public function jewelsItems(){
return $this->hasMany('App\Models\JewelsItem');
}
3.sellInvoice 型号:
protected $table = "sell_invoices";
public function jewelsItems(){
return $this->hasMany(JewelsItem::class,'buy_invoice_id');
}
查询: 我想获取所有没有销售发票且珠宝名称如 'something'.
的珠宝商品注意: 珠宝模型有一个名称属性。我想将珠宝的名称添加到所有结果的第一个项目中。
我知道如何获得名称为 'something' 的所有珠宝:
Jewel::where('name','like','something'.'%')->get();
但我无法获取所有与其相关的 jewelItem,并在其中第一个中添加 jewel 名称。
要查找另一个关系中的条件,您可以使用 whereHas()
和 whereDoesntHave()
$name = 'something';
$items = JewelsItem::whereHas('jewel', function($query) use ($name) {
$query->where('name', 'LIKE', "%{$name}%");
})
->whereDoesntHave('sellInvoice')
->with('jewel')
->get();
内容如下:获取珠宝的名称字段中包含 $name 的珠宝物品
并且没有销售发票
然后将相关的珠宝添加到珠宝项目中。
当你想取回宝石的名称时,你可以像这样访问它的属性。
foreach($items as $item) {
echo $item->jewel->name;
}