Laravel属于Too返回,put无法保存在var中

时间:2014-04-22 17:59:19

标签: php laravel eloquent

我试图通过belongsTo项目获取用户名。

我在我的物品模型中有这个:

public function user()
{
   return $this->belongsTo('User', 'user_id', 'id');
}

这在我的控制器中:

$user = $item->user->username;

但我明白了:

Trying to get property of non-object

当我这样做时:

return $item->user->username;

在我的控制器中它可以工作。

有什么不对?

控制器/型号:http://pastebin.com/qpAh8eFd

1 个答案:

答案 0 :(得分:0)

您的控制器中有以下功能:

public function index($type)
{
    $items = $this->item->where('type', '=', $type)->get();
    foreach($items as $item):
        $user = $item->user->username;
    endforeach;
    return View::make('items.index', ['items' => $items, 'user' => $user]);
}

你不需要在控制器中进行foreach查看,无论你做什么,你做错了,而是像你这样做index函数:

public function index($type)
{
    $items = $this->item->where('type', '=', $type)->get();
    return View::make('items.index', ['items' => $items]);
}

仅将$items传递到您的items/index.blade.php视图。如果需要,您可以在视图中执行foreach循环,并且在每次迭代中,您可以使用以下内容访问与user相关的item

@foreach($items as $item)
    {{ $item->user->uername }}
@endforeach

您可能会收到Trying to get property of non-object错误消息,因为每个$item可能没有相关用户。因此,请确保每个$item都有相关用户。您还可以使用以下内容获取user项目:

$items = $this->item->with('user')->where('type', '=', $type)->get();
return View::make('items.index', ['items' => $items]);

在您的视图中,您可以检查该项目是否包含相关用户:

@foreach($items as $item)
    @if($item->user)
        {{ $item->user->uername }}
    @endif
@endforeach