如何在“With”(ManyToMany Laravel)中制作where-filter?
How to make where-filter in “With” (ManyToMany Laravel)?
多对多关系。
我正在尝试提出请求:
$products=Product::with(['lists' => function($query)
{
$query->where('user_id', Auth::id());
}])
->orderBy('id', 'desc')
->paginate(20);
但是我得到一个错误。
"SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'user_id' in where clause is ambiguous (SQL: select `mainlists`.*, `list_products`.`product_id` as `pivot_product_id`, `list_products`.`list_id` as `pivot_list_id` from `mainlists` inner join `list_products` on `mainlists`.`id` = `list_products`.`list_id` where `user_id` = 16 and `list_products`.`product_id` in (73, 80, 81, 87, 88, 89)
这些关系在各种其他查询中都能正常工作。
我认为我的请求对于 ManyToMany 关系类型是不正确的。
因为查询试图将多个产品与数据透视表 table 进行比较。
因为你的 product
和 list
都有 user_id
你应该selectuser_id
考虑
像这样:
$products=Product::with(['lists' => function($query)
{
$query->where('list_products.user_id', Auth::id());
}])
->orderBy('id', 'desc')
->paginate(20);
多对多关系。 我正在尝试提出请求:
$products=Product::with(['lists' => function($query)
{
$query->where('user_id', Auth::id());
}])
->orderBy('id', 'desc')
->paginate(20);
但是我得到一个错误。
"SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'user_id' in where clause is ambiguous (SQL: select `mainlists`.*, `list_products`.`product_id` as `pivot_product_id`, `list_products`.`list_id` as `pivot_list_id` from `mainlists` inner join `list_products` on `mainlists`.`id` = `list_products`.`list_id` where `user_id` = 16 and `list_products`.`product_id` in (73, 80, 81, 87, 88, 89)
这些关系在各种其他查询中都能正常工作。 我认为我的请求对于 ManyToMany 关系类型是不正确的。 因为查询试图将多个产品与数据透视表 table 进行比较。
因为你的 product
和 list
都有 user_id
你应该selectuser_id
考虑
像这样:
$products=Product::with(['lists' => function($query)
{
$query->where('list_products.user_id', Auth::id());
}])
->orderBy('id', 'desc')
->paginate(20);