2013-05-21 72 views
0

我有这两个类:预先加载有belongs_to的模型(laravel)

<?php 
class Client extends Eloquent 
{ 
    public function orders() 
    { 
     return $this->has_many('Order'); 
    } 
} 

和订单类:

<?php 
class Order extends Eloquent 
{ 
    public function client() 
    { 
     return $this->belongs_to('Client'); 
    } 
} 

在我的控制,我使用的加载命令:

$orders = Order::with('client')->order_by('id', 'asc'); 

这是retieving我的订单的数据,并且,实际上,它正在执行急切的加载查询:

SELECT * FROM `orders` ORDER BY `id` ASC LIMIT 10 OFFSET 0 
SELECT * FROM `clients` WHERE `id` IN ('1') 

我可以使用打印订单的数据:

$order->id 

但是,印刷客户的数据时,使用:

$order->client->name 

它表明这个错误:

"Trying to get property of non-object" 

这里是堆栈跟踪:

#0 /home/instakioski/laravel/laravel.php(42): Laravel\Error::native(8, 'Trying to get p...', '/home/instakios...', 136) 
#1 /home/instakioski/laravel/view.php(386) : eval()'d code(136): Laravel\{closure}(8, 'Trying to get p...', '/home/instakios...', 136, Array) 
#2 /home/instakioski/laravel/view.php(386): eval() 
#3 /home/instakioski/laravel/blade.php(71): Laravel\View->get() 
#4 [internal function]: Laravel\{closure}(Object(Laravel\View)) 
#5 /home/instakioski/laravel/event.php(199): call_user_func_array(Object(Closure), Array) 
#6 /home/instakioski/laravel/event.php(138): Laravel\Event::fire('laravel.view.en...', Array, true) 
#7 /home/instakioski/laravel/view.php(348): Laravel\Event::until('laravel.view.en...', Array) 
#8 /home/instakioski/laravel/view.php(590): Laravel\View->render() 
#9 /home/instakioski/laravel/response.php(268): Laravel\View->__toString() 
#10 /home/instakioski/laravel/laravel.php(180): Laravel\Response->render() 
#11 /home/instakioski/public/index.php(34): require('/home/instakios...') 
#12 {main} 

我在做什么错?

回答

0

DD($ order-> client)来查看它是否真的为空。如果该特定订单的client_id与现有客户端不匹配,则该值可能为空。另外,订单表“client_id”上的外键是什么?如果没有,你需要这样做:

public function client() 
{ 
    return $this->belongs_to('Client', 'foreign_key'); 
} 

其中“foreign_key”是把握关键到订单客户数据库列的名称。

+0

Aahh yes!这是因为client_id不再存在。谢谢! – Mateusgf

0

调试你的结果:

编制品设置成sd($orders->toArray());

基本上你迭代的订单集合:

foreach($orders as $order) 

$order有一个客户端

$order->client->name 

[email protected] 
+0

使用dd($ orders-> toArray());不起作用,但dd($ orders)显示我的CLIENT为NULL。我在foreach中使用$ order-> client-> name($ order作为$ order) – Mateusgf