[英]Laravel hasMany relationship returning undefined method
我有一個Laravel模型:
class Order extends Eloquent{
protected $table = 'orders';
public function orderItems(){
return $this->hasMany('OrderItem');
}
public static function findByUserMonthYear($user_id, $month, $year){
return Order::where('user_id', '=', $user_id)
->where('month', '=', $month)
->get();
// ->where('year', '=', $year);
}
}
當然,我有一個OrderItem
類
class OrderItem extends Eloquent{ ...
但是,如果我這樣做:
$order = Order::findByUserMonthYear(Auth::user()->id, Date::getDate(), 2014);
$order->orderItems();
我得到以下內容:
Call to undefined method Illuminate\Database\Eloquent\Collection::orderItems()
我究竟做錯了什么? 如果我要將語句更改為Order::with('orderItems')
,關系似乎可以正常工作,但是我想刪除與當前Order
相關的所有orderItems
。
您在findByUserMonth中的->get()
返回一個Collection。 如果此查詢僅返回一個集合,則使用->first()
,但是,如果您的查詢返回多個結果,則急於加載orderItems的結果,如下所示:
public static function findByUserMonthYear($user_id, $month, $year){
return self::with('orderItems')->where('user_id', '=', $user_id)
->where('month', '=', $month)
->get();
// ->where('user_id', '=', $year);
}
然后,您可以像這樣訪問結果;
@foreach($orders as $order)
{{$order->orderItem}}
@endforeach
這是因為return是一個集合,因此您必須遍歷它們。 使用{{$order->orderItem}}
訪問結果
我對此不太確定,但我認為您可以像這樣刪除hasMany中的所有模型; $order->orderItem()->delete();
因為orderItem()
的返回是Query \\ Builder實例。
您的第二個類必須是擴展Order類,此行用於OrderItem類:
class OrderItem extends Order {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.