多对多 Eloquent

Many to many Eloquent

好的,所以我尝试了您的答案,我可以 return 与用户相关联的发票,但我无法在该发票中获取产品,我只想获取与用户相关联的产品及其产品的发票。

如果我提到创建产品的用户的 ID 和发票的 ID,我希望查询 return 我的发票以及与提到的用户 ID 关联的产品。

当我使用这个时 :

        $Invoices = Commande::find(1)->whereHas('Product', function($query){
        return $query->where('products.user_id', 3);
    })->with('Product')->get();

我只得到发票。

但我想要发票和发票中与特定用户关联的产品。

这就是 whereHas() 方法的用武之地。你应该能够做这样的事情:

$user = User::find($userId); // Let's assume `$userId` is `1`
$invoices = Invoice::whereHas('products', function ($query) use ($user) {
  return $query->where('products.user_id', $user->id);
})->get();

这将 return 与 $user 记录相关联的所有 Invoice 记录 return 由 User::find($userId) 编辑(同样,在这种情况下,user_id: 1)

您可以在此处查看完整文档:

https://laravel.com/docs/9.x/eloquent-relationships#querying-relationship-existence


注意:您可能需要调整我在上面代码中使用的 model/relationship 名称以满足您的需要,但基本思想保持不变。

您可以使用此查询来获取属于特定用户的发票及其产品

// my user id is currently authenticated, user

Invoice::query()->where('user_id', auth()->user()->id)->with('products')->paginate();