我的数据库结构如下:
fashion_item
==============
| id | name |
|------------|
| 1 | item1 |
|------------|
| 2 | item2 |
--------------
fashion_colour
===============
| id | name |
|-------------|
| 1 | red |
|-------------|
| 2 | white |
|-------------|
| 3 | green |
---------------
| 4 | black |
---------------
fashion_color_fashion_item
======================================
| fashion_item_id | fashion_color_id |
|------------------------------------|
| 1 | 1 |
|------------------------------------|
| 1 | 2 |
|------------------------------------|
| 1 | 3 |
|------------------------------------|
| 2 | 2 |
|------------------------------------|
| 2 | 3 |
--------------------------------------
fashion_color_fashion_item
表是fashion_item
和fashion_color
之间多对多关系的联接表。
使用Eloquent,我想从fashion_item中检索结果列表(基于其他条件),然后从结果中获取fashion_colour
id&#39的独特列表,并计算。
我需要最终获得如下值,尽管我愿意转换来自其他结构的相关数据。
[ 1 => 1, 2 => 2, 3 => 2, 4 => 0 ]
在这种格式中,有一个反映fashion_color.id
的键,以及一个表示结果集中一行引用颜色的次数的值。
fashion_colour.id
没有计数结果可以为null,0或根本不存在。
我在表之间设置了正确的关系,我可以使用所有常规方法返回结果,包括急切加载颜色数据。
通过根据表中的外键对结果进行分组并对数组进行计数,我已经能够在直接属于关系上获得类似的结果。这对多对多关系不起作用。
e.g。
$silhouetteFilterList = array();
$results = FashionItem::(where clauses, etc...)->get();
$silhouettes = $results->groupBy('fashion_silhouette_id')->all();
foreach ($silhouettes as $key => $value) {
$silhouetteFilterList[$key] = count($value);
}
P.S。我们目前正在使用Eloquent 4.1,因为我们需要兼容PHP 5.3,我们希望尽快继续。关于PHP5.3或Eloquent 4.1过时性质的评论将不受欢迎:p
我们正在使用Eloquent而不是Laravel。
答案 0 :(得分:0)
尝试急切加载关系:
$collection = $items->with('colors')->get();
集合中的每个项目现在应该有一个colors
变量,表示该特定项目的颜色数组。
由于这是一般的Laravel Collection,您可以使用集合和数组方法以您喜欢的格式获取它。