>我有一个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 {