gpt4 book ai didi

laravel - 具有 HasMany 关系的过滤器模型

转载 作者:行者123 更新时间:2023-12-04 16:07:30 26 4
gpt4 key购买 nike

假设我有两个模型:ParkItems。通过 HasMany 关系,每个 Park 都可以有多个 Items

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;

最佳答案

您可以在 whereHas 方法中使用 foreach。它应该是这样的:

$array = json_decode($request->type_list, true)
$parks = Park::whereHas('items', function($q) use ($array) {
foreach ($array as $key => $type) {
$q->where('type', $type);
}
})->get();

关于laravel - 具有 HasMany 关系的过滤器模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48111772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com