//model
return $this->hasMany('App\Model\Order', 'customer_id')->select('name');
//controller
$customer = Model\customer::find($id);
return view('customer', array('data' => $customer));
//view (blade)
{{ $data }} //{"id":1,"name":"Tony"}
{{ $data->orders }} //[{"name":"T-shirt"},{"name":"Macbook"}]
我是laravel的新人
我有一个关于将数据传递给view.blade
的问题我使用hasMany将2个表连接在一起并传递$ data到view
当我尝试输出$ data时,我无法在数据对象中看到订单对象
但是当我执行$ data->订单时,它会显示对象
谁能告诉我它是如何运作的?
答案 0 :(得分:1)
您看到的行为是因为Laravel在访问它们时会延迟加载关系。如果尚未加载关系,Laravel将发送另一个查询并将其添加到幕后的$data
对象中。这就是为什么当您转储$data
变量时,您没有看到订单。
要演示,请运行以下代码段。
{{ $data }} //{"id":1,"name":"Tony"}
// Laravel will lazy load the orders relation
{{ $data->orders }} //[{"name":"T-shirt"},{"name":"Macbook"}]
// Now the $data object has the orders property.
{{ $data }} //{"id":1,"name":"Tony", "orders": [{"name":"T-shirt"},{"name":"Macbook"}]}
这里有几个选项。这是2。
$customer = Model\customer::with('orders')->find($id);
这是首选方法,因为它可以防止n + 1查询。
$customer = Model\customer::find($id);
$customer->load('orders');
现在,当您转储模型时,您将看到orders属性。
答案 1 :(得分:0)
在你的模特中,
public function orders(){
return $this->hasMany('App\Model\Order', 'customer_id');
}
在视图中
{{ $data->orders->order_name }}
我希望它能起作用
答案 2 :(得分:0)
您已在模型中定义了hasMany关系。因此,对于特定客户,可以有多个订单。所以,它在数组中显示。你必须循环:
foreach($data->orders as $order)
{
$order->name
}
获取订单。