laravel 多关系查询

laravel multiple relation query

我的项目中有 3 个模型,我想得到一个查询或收集结果,正如我所说:

  1. 珠宝物品型号:

    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;
}