2013-10-07 49 views
2

一個購物車ORM檢查這是我的表結構在Laravel

用戶

 
id 
username 
password 

訂單

 
id 
user_id 

ORDER_DETAILS

 
id 
product_id 
order_id 

而且關係是所有設置

user.php的

function orders() { 
    return $this->hasMany('Order'); 
} 

Order.php

function details() { 
    return $this->hasMany('OrderDetail'); 
} 

OrderDetail.php

我得到了用戶ID和產品ID,我想檢查用戶是否購買了此產品

User::find($userId)->orders()->details()->where('product_id', $productId)->count()會出錯,因爲訂單返回多個數據,該怎麼辦?

回答

1

你不能用一次滑動就能完成。但是你可以很容易地編寫一個函數做檢查:

public function hasBoughtProduct($product_id, $user_id) 
{ 

$orders = Orders::with('details')->where('user_id','=',$user_id)->get(); 

foreach($orders as $order) 
{ 
    $details = $order->details()->where('product_id', '=', $product_id)->count(); 
    if($details > 0) 
    { 
      return TRUE; 
    }  
} 
return FALSE; 
} 

如果這不是您需要足夠的效率,可以考慮使用流利的寫查詢或您將覆蓋newQuery()方法預加入表格。如果這更適合你,你可以參考這個答案獲得更多關於如何做的信息:https://stackoverflow.com/a/19183957/385402