簡體   English   中英

Laravel 雄辯,根據Column 值創建集合

[英]Laravel eloquent, create collection based on Column value

我有一個如下所示的示例表:

| id | is_new | cate |
| 0  |   1    | [5]  |
| 1  |   1    | [5]  |
| 2  |   1    | [7]  |
| 3  |   1    | [6]  |

在我調用以下函數之后

   $product = Products::where('is_new', 1)->get();

該集合具有以下數據結構

Collection {#1284 ▼
  #items: array:4 [▼
    0 => Products {#1285 ▶}
    1 => Products {#1286 ▶}
    2 => Products {#1287 ▶}
    3 => Products {#1288 ▶}
  ]
}

我還可以通過以下方式返回類別 ID 列表:

    $category = Category::where('type', 2)->pluck('id')->all();  

我想知道有沒有什么好方法可以基於 cate 實現以下結構(或類似結構)。 我可以使用蠻力方式通過循環遍歷 $category 然后手動添加到新集合來創建它,我認為有更好的方法來做到這一點。

Collection {#1284 ▼
  #items: array:3 [▼
    5 => array:2 [▼
         0 => Products {#1285 ▶}
         1 => Products {#1286 ▶}
         ]
    6 => Products {#1287 ▶}    or  6 => array:1 [ 0 => Products {#1287 ▶} ]
    7 => Products {#1288 ▶}
  ]
}

基於答案的解決方案更新:

$product->groupBy(function($item) {
        return $item['cate'][0]; //because the entry is a list
    });

您應該考慮使用groupBy類的東西將您的類別組合在一起。 它可以在數據庫級別(假設您具有參照完整性)使用外鍵完成。 您還將得到保證,返回的是每個類別的數組,這將使事情更加一致(然后,您不需要檢查它是數組還是Products的實例)。

如果您的類別像數組一樣存儲,您可能需要更改數據庫布局,但為此您應該使用中間表 - 查看多對多關系

暫無
暫無

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

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