如何在“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 进行比较。

因为你的 productlist 都有 user_id 你应该selectuser_id考虑

像这样:

$products=Product::with(['lists' => function($query)
            {
       $query->where('list_products.user_id', Auth::id());
            }])
            ->orderBy('id', 'desc')
            ->paginate(20);