簡體   English   中英

Laravel hasMany關系返回未定義的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM