我在Order和Item表之间具有多对多关系。 这种关系是为了模型中定义:从Laravel的原始列表中排除或删除子列表
public function items()
{
return $this->belongsToMany('Item', 'order_item', 'order_id', 'item_id');
}
如果客户将商品的顺序,他从一个列表
$items = Item::all();
选择一个项目,这个选择的产品添加在中间(支点)表(order_id,item_id)。
问题是,我需要我的物品清单只包含这些物品,而这些物品以前没有被选择过。即数据透视表不包含组合到这个特定顺序的这些项目。
伪代码:
$all_Items = Item::all();
$previously_Selected_Items = select_From_Pivot_Table::where('order_id', '=', $id);
$required_Items_List = $all_items->exclude($previously_Selected_Items);
我使用Laravel 4.2。 有什么建议? 在此先感谢。
你可以将plz重定向到'whereDoesntHave'的解释中,以便更好地理解它的工作。我搜索了网页,但没有发现任何内容。 @lukasgeiter – 2015-02-11 12:06:03
查看[文档]中的whereHas(http://laravel.com/docs/5.0/eloquent#querying-relations)。 “WhereDoesntHave'基本上是相反的。它将选择所有没有与条件相匹配的相关型号Order的产品('order_id = $ id') – lukasgeiter 2015-02-11 12:08:30
'whereDoesntHave'似乎不存在。任何如何,我正在尝试'whereHas',到目前为止它返回一个空数组。有什么建议么? – 2015-02-11 13:03:34