Laravel Eloquent - 在find()方法中使用数组

时间:2017-04-24 16:41:23

标签: php laravel eloquent

我有三张牌桌 - usersproductsorders usersorders之间存在关联(users有许多orders)。

orders表包含product_iduser_id列。

现在我想访问用户订单的产品详细信息。

我在尝试什么:

public function myOrders(){
    $orders = Auth::user()->orders->pluck('product_id');
    $products = Product::find($orders);
    return view('shop.myorders', compact('products'));
} 

但这不起作用。谁能帮我?还有什么方法可以更好地实现这一目标?

2 个答案:

答案 0 :(得分:2)

如上所述,find()将始终返回1个项目,并期望参数的字符串/ int。您想要使用whereget代替。使用一系列ID,您可以使用whereIn

public function myOrders(){
    $orders = Auth::user()->orders->pluck('product_id');
    $products = Product::whereIn('id', $orders)->get();
    return view('shop.myorders', compact('products'));
}

答案 1 :(得分:1)

我假设您在orders()模型中定义了Product关系:

public function orders()
{
    return $this->hasMany(Order::class)
}

然后您就可以加载所有用户订单中的产品了:

$products = Product::whereHas('orders', function($q) {
        $q->where('user_id', auth()->id())
    })->get();