doulao2916
2017-04-24 16:41
浏览 356
已采纳

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

I have three tables - users, products and orders There is a relation between users and orders (users has many orders).

orders table contains product_id and user_id column.

Now I want to access the product details of orders for a user.

What I am trying:

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

But this is not working. Can anyone help me? What other way can be better to achieve this?

图片转代码服务由CSDN问答提供 功能建议

我有三个表 - users products 和< 代码>订单 用户 orders 之间存在关系(用户有很多 orders ) 。

orders 表包含 product_id user_id 列。 < p>现在我想访问用户订单的产品详细信息。

我在尝试:

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

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

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dongtiao1817 2017-04-24 16:45
    已采纳

    As mentioned, find() will always return 1 item, and expects a string/int for the parameter. You want to use where and get instead. With an array of ids, you can use whereIn.

    public function myOrders(){
        $orders = Auth::user()->orders->pluck('product_id');
        $products = Product::whereIn('id', $orders)->get();
        return view('shop.myorders', compact('products'));
    }
    
    打赏 评论
  • doudouwd2017 2017-04-24 16:45

    I assume you have orders() relation defined in the Product model:

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

    Then you'll be able to load products from all user's orders:

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

相关推荐 更多相似问题