雄辩:来自关系

时间:2016-03-14 15:46:01

标签: eloquent

我的数据库结构如下:

 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_itemfashion_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。

1 个答案:

答案 0 :(得分:0)

尝试急切加载关系:

$collection = $items->with('colors')->get();

集合中的每个项目现在应该有一个colors变量,表示该特定项目的颜色数组。

由于这是一般的Laravel Collection,您可以使用集合和数组方法以您喜欢的格式获取它。