laravel传递数据以查看刀片

时间:2016-11-20 08:54:01

标签: laravel

//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->订单时,它会显示对象

谁能告诉我它是如何运作的?

3 个答案:

答案 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。

1。查询模型时的热切负载关系。

$customer = Model\customer::with('orders')->find($id);

这是首选方法,因为它可以防止n + 1查询。

2。查询模型后的负载关系。

$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
}

获取订单。