案例
Laravel 5.3
在Cart
&之间设置一个数据透视表Product
还有一栏:
id - cart_id - product_id - item_id (additional column)
1 - 1 - 1 - 5
2 - 1 - 1 - 6
3 - 1 - 1 - 7
4 - 2 - 1 - 8
通常使用以下方法分离数据透视表记录:
$product->carts()->detach($cartId);
但在这种情况下,有几个数据透视表记录具有相同的cart
& product
id
问题
假设我要删除row 1
。
我希望工作的是其中之一:
$product->carts()->detach($itemId);
或
$product->carts()->detach($cartId)->first();
如果我根据cart_id
&amp ;;查询数据透视表product_id
,请致电first
&在该查询结果上运行delete()
,将返回Call to undefined method stdClass::delete()
$firstItem = DB::table('cart_product')
->where('cart_id', $cart_id)
->where('product_id', $product->id)
->first();
$firstItem->delete();
虽然在查询数据后我dd()
$firstItem
,但它会返回一个(正确的)对象
{#238 ▼
+"id": 1
+"cart_id": 1
+"product_id": 1
+"item_id": 5
}
答案 0 :(得分:1)
如果您只想删除此表中的一行,则无法使用detach()
。
如果您只想删除第一项,请使用:
DB::table('cart_product')
->where('cart_id', $cart_id)
->where('product_id', $product->id)
->take(1)
->delete();
或者来自您的代码:
$id = DB::table('cart_product')
->where('cart_id', $cart_id)
->where('product_id', $product->id)
->first()->id;
DB::table('cart_product')
->where('id', $id)
->delete();