【发布时间】:2018-04-19 04:48:53
【问题描述】:
我有两个模型:食品和设备。 这两个模型是多对多关系的(也处理了我的 Laravel Eloquent)。所以 Food 有一些准备它所需的设备。
我想要过滤食物,其中包含输入时提供的所有设备,并且该食物不需要任何其他设备。所以换句话说 - 当输入设备包含在与某些食物相关的设备中时。
创意展示示例
例如,我有一个名为“Xyz cake”的样品食品。要准备这些食物,您需要
- 搅拌机
- 烤箱
假设我们输入了以下设备:
- 搅拌机
- 厨房机器人
- 烤箱
在这种情况下,过滤脚本应该将我们的食物纳入结果,因为与食物相关的设备正在适合输入设备。
另一个例子:“Abc 蛋糕”。所需设备:
- 搅拌机
- 厨房机器人
- 烤箱
输入设备:
- 搅拌机
- 厨房机器人
在这种情况下,脚本不应将食物纳入结果,因为准备食物还需要烤箱,但输入设备中不存在烤箱。
我当前的代码
$equipments 变量是包含输入设备 ID 的数组。
$query = Food::query();
$query->join('equipments_foods', function ($join) use ($equipments) {
$join->on('foods.id', '=', 'equipments_foods.food_id');
$join->whereIn('equipments_foods.equipment_id', $equipments);
});
$results = $query->get();
此代码无法正常工作,因为它提供的 Foods 包含来自输入设备的至少一个设备。
数据库是 MySQL。
请帮助我实现正常工作的过滤。
非常感谢!
【问题讨论】:
-
通过
with()和范围查询使用预先加载。$users = User::with('podcasts')->get();之类的东西,如果您有多个关系,则使用 stackoverflow.com/questions/46732845/… 之类的作用域
标签: php mysql sql laravel eloquent