簡體   English   中英

Eloquent 中的 3 個(可選)關系級別

[英]3 (optional) levels of relationships in Eloquent

我想創建一個網站,讓狗主人可以搜索他們可以安全地喂狗的東西。 或不。
我一直在為這個概念而苦苦掙扎,請耐心等待...

讓我們以四個示例產品(表格產品)為例:

  1. 牛油果
  2. 巧克力
  3. 蘿卜
  4. ...

這些產品可以有一個或多個元素(表格元素):

  1. 皮膚
  2. 骨頭
  3. ...

並且這些元素可以不同地准備(表屬性):

  1. 生的
  2. 熟的
  3. ...

現在讓我們把這些聯系起來......

  1. 鱷梨有一個核,有皮有肉
  2. 巧克力只是巧克力
  3. 雞肉有肉,有骨頭。 肉和骨頭可以生也可以煮

現在我需要談談這些產品及其元素/准備...

  1. 一個鱷梨(1)果核(1.1)和皮(1.3)對狗有毒,它的肉很好(無論如何,1.2)
  2. 巧克力總是有毒的 (2)
  3. 雞肉(3.2)總是好的,它的骨頭煮熟(3.4.2)是有毒的,生的(3.4.1)是好的。
  4. 胡蘿卜(4)總是好的

對我來說,似乎我必須將這些關系(無論它們的深度)存儲在一個表中,並有一個單獨的表來說明這種關系是安全的還是有毒的。

但我不確定如何在 Laravel 模型中進行設置並通過 Eloquent 進行查詢。 因為在用戶端,您只想搜索巧克力或鱷梨並查看返回的各種關系。

我建議做這樣的結構

產品

  • ID
  • 姓名

產品元素

  • ID
  • product_id
  • 姓名
  • 准備(生的,熟的)
  • is_toxic
class Product extends Model
{
    protected $guarded = ['id'];

    public function elements()
    {
        return $this->hasMany(ProductElement::class);
    }
}

class ProductElement extends Model
{
    protected $guarded = ['id'];

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

當用戶選擇了食物並想看看狗能吃什么時

ProductElement::query()->whereIn('product_id', [1, 2])->get();
ProductElement::query()->whereIn('product_id', [1, 2])->where('is_toxic', false)->get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM