【发布时间】:2018-06-16 03:01:34
【问题描述】:
假设我有两个模型:Park 和 Items。每个Park 可以有多个Items,通过HasMany 关系。
在Items 表中有一个park_id 字段和一个type 标志:Item 可以是喷泉、篮球场或其他任何东西。
我需要做的是过滤公园以仅获取那些在数组中传递了所有项目类型的公园。这就是我所拥有的:
$parks = Park::whereHas('items', function($q) use ($request) {
$q->where('type', json_decode($request->type_list));
})->get();
但它不能正常工作。有什么想法吗?
非常感谢,祝大家新年快乐!
编辑:我找到了一个可行但非常丑陋的解决方案:
$types_array = json_decode($request->type_list, true);
$results = [];
// A collection of parks for each item type
foreach($types_array as $type) {
$results[] = Park::whereHas('items', function($q) use ($type) {
$q->where('type', $type);
})->get();
}
// Intersect all collections
$parks = $results[0];
array_shift($results);
foreach ($results as $collection) {
$parks = $collection->intersect($parks);
}
return $parks;
【问题讨论】:
-
几个问题:1) 你使用的是什么版本的 Laravel? 2)
dd( json_decode($request->type_list));的输出是什么? 3) 请您解释一下它是如何工作不正常的? -
您好罗斯,抱歉信息不足。 1)5.4 2)[“ag”,“zd”](这工作正常) 3)我没有得到一个包含所有项目类型的公园列表,而是一个包含一些项目类型的公园列表。我需要满足所有条件的公园集合。