Laravel 4 HasManyThrough的雄辩方法

Laravel 4 HasManyThrough的雄辩方法,laravel-4,eloquent,Laravel 4,Eloquent,我花了整整十个小时试图解决这个问题,但不确定我到底出了什么问题。我希望订单中的项目根据它们与订单的关系显示 我有3个表,我需要在加载用户配置文件页面时从中获取信息。在该页面上,我试图显示以前的订单(即:订单日期)以及为每个订单订购的项目。以下是表格的明细: 用户 身份证 订单 身份证 订购日期 用户id 订购商品 订单号 在我的用户模型中,我有: public function orders() { return $this->hasMany('Orde

我花了整整十个小时试图解决这个问题,但不确定我到底出了什么问题。我希望订单中的项目根据它们与订单的关系显示

我有3个表,我需要在加载用户配置文件页面时从中获取信息。在该页面上,我试图显示以前的订单(即:订单日期)以及为每个订单订购的项目。以下是表格的明细:

用户

  • 身份证
订单

  • 身份证
  • 订购日期
  • 用户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。希望其他人会觉得这很有用。