Laravel 4 HasManyThrough的雄辩方法
我花了整整十个小时试图解决这个问题,但不确定我到底出了什么问题。我希望订单中的项目根据它们与订单的关系显示 我有3个表,我需要在加载用户配置文件页面时从中获取信息。在该页面上,我试图显示以前的订单(即:订单日期)以及为每个订单订购的项目。以下是表格的明细: 用户Laravel 4 HasManyThrough的雄辩方法,laravel-4,eloquent,Laravel 4,Eloquent,我花了整整十个小时试图解决这个问题,但不确定我到底出了什么问题。我希望订单中的项目根据它们与订单的关系显示 我有3个表,我需要在加载用户配置文件页面时从中获取信息。在该页面上,我试图显示以前的订单(即:订单日期)以及为每个订单订购的项目。以下是表格的明细: 用户 身份证 订单 身份证 订购日期 用户id 订购商品 订单号 在我的用户模型中,我有: public function orders() { return $this->hasMany('Orde
- 身份证
- 身份证
- 订购日期
- 用户id
- 订单号
public function orders()
{
return $this->hasMany('Order');
}
public function order_items()
{
return $this->hasManyThrough('OrderItem', 'Order');
}
我的UserController方法如下所示:
public function show()
{
$user = User::find(Auth::user()->id);
return View::make('users/show')->with('user', $user);
}
@foreach($user->orders as $order) // this foreach relationship works
{{ $order->order_date }}
@endforeach
在“users/show.blade.php”中,我试图访问以下关系中的数据:
public function show()
{
$user = User::find(Auth::user()->id);
return View::make('users/show')->with('user', $user);
}
@foreach($user->orders as $order) // this foreach relationship works
{{ $order->order_date }}
@endforeach
我遇到的问题是访问每个订单的项目(订单项目)。我在一个基本的PHP项目上做过类似的事情,但我正在尝试学习和使用雄辩的语言。如何实现这一点?虽然用户模型上的hasManyThrough关系没有问题,但在这种情况下,最好通过订单模型访问订单项 确保您的订单模型定义了以下关系:
class Order extends Eloquent {
public function order_items() {
return $this->hasMany('OrderItem');
}
}
现在,您的视图将类似于:
@foreach($user->orders as $order)
{{ $order->order_date }}
@foreach($order->order_items as $order_item) // order items for this order
{{ $order_item->name }}
@endforeach
@endforeach
补充说明:
这不是必需的,但是为了使所有这些数据加载更快一些,您应该急切地加载所有关系以缓解N+1问题。阅读有关快速加载的信息
此外,实际上不需要查找用户。您已经拥有具有Auth::user()
的用户。但是,即使您拥有用户,也最好立即加载相关记录:
public function show() {
$user = Auth::user();
// load the orders and nested order_items records
$user->load('orders.order_items');
return View::make('users/show')->with('user', $user);
}
谢谢!你是个救生员。实际上,我在订单模型中有精确的代码,但使其工作的关键是急切的加载。尝试在嵌套的foreach中调用order\u items方法导致为foreach()提供的参数无效。再次感谢。如果我有更多的声誉,我会很乐意给一个+1。希望其他人会觉得这很有用。