从 Laravel 中的原始列表中排除或删除子列表
Exclude or remove sub list from original list in Laravel
我在订单和项目之间有一个多对多的关系 table。
这种关系在订单模型中定义:
public function items()
{
return $this->belongsToMany('Item', 'order_item', 'order_id', 'item_id' );
}
如果客户要向订单添加商品,他会从列表中选择一个商品
$items = Item::all();
并且这个选择的项目被添加到中间(枢轴)table(order_id,item_id)。
问题是,我需要我的商品列表只包含之前未为此订单选择的这些商品。即 pivot table 不包含组合到此特定顺序的这些项目。
伪代码:
$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。
有什么建议么??
提前致谢。
您可以使用 whereDoesntHave
并使用以下关系过滤项目:
$items = Item::whereDoesntHave('orders', function($q) use ($id){
$q->where('order_id', $id);
})->get();
经过一段时间的搜索和尝试一些建议的想法,我想出了一个简单但不专业的解决方案:
$order = Order::where('id', '=', $id)->with('items')->first();
$allitems= Item::all();
然后 array_diff,一个 php 函数,成功了:
$items = array_diff($allitems->lists('name','id'), $order->items->lists('name','id'));
但是 $items 只是一个 ID 和名称的列表,而不是我需要的整个对象。所以我需要一个更好的解决方案。
我在订单和项目之间有一个多对多的关系 table。 这种关系在订单模型中定义:
public function items()
{
return $this->belongsToMany('Item', 'order_item', 'order_id', 'item_id' );
}
如果客户要向订单添加商品,他会从列表中选择一个商品
$items = Item::all();
并且这个选择的项目被添加到中间(枢轴)table(order_id,item_id)。
问题是,我需要我的商品列表只包含之前未为此订单选择的这些商品。即 pivot table 不包含组合到此特定顺序的这些项目。
伪代码:
$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。 有什么建议么?? 提前致谢。
您可以使用 whereDoesntHave
并使用以下关系过滤项目:
$items = Item::whereDoesntHave('orders', function($q) use ($id){
$q->where('order_id', $id);
})->get();
经过一段时间的搜索和尝试一些建议的想法,我想出了一个简单但不专业的解决方案:
$order = Order::where('id', '=', $id)->with('items')->first();
$allitems= Item::all();
然后 array_diff,一个 php 函数,成功了:
$items = array_diff($allitems->lists('name','id'), $order->items->lists('name','id'));
但是 $items 只是一个 ID 和名称的列表,而不是我需要的整个对象。所以我需要一个更好的解决方案。