Laravel有许多关系返回未定义的方法

时间:2014-11-18 10:12:27

标签: php laravel

我有一个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'),则该关系似乎正常,但我想删除与当前orderItems关联的所有Order

2 个答案:

答案 0 :(得分:2)

你身边的->get()找到了ByUserMonth正在返回一个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

这是因为返回是一个集合,所以你必须遍历它们。使用{{$order->orderItem}}访问结果

我对此不太确定,但我认为你可以删除hasMany中的所有模型,如此; $order->orderItem()->delete();返回orderItem()是Query \ Builder实例。

答案 1 :(得分:-1)

你的第二堂课必须延伸订单班 将此行用于OrderItem类:

class OrderItem extends Order {