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


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()正在返回一个集合。如果此查询仅返回一个集合,则改用->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}}访问结果

我对此不太确定,但我认为您可以删除所有模型; $order->orderItem()->delete();,因为orderItem()的返回是一个 Query''Builder 实例。

你的第二个类必须扩展 订单类将此行用于订单项类:

class OrderItem extends Order {