939c885abda79cfdae4288b828415df7第38行中的ErrorException:尝试获取非对象的属性

时间:2015-11-17 21:17:47

标签: php laravel views models

我一直收到这个错误:

ErrorException in 939c885abda79cfdae4288b828415df7 line 38: 
Trying to get property of non-object

我的控制器看起来像这样:

$episodes = Episode::orderBy('id', 'desc')->paginate(5);

$channels = Channel::lists('channel_name', 'id')->all();

return view('app.admin.episodes', compact('episodes', 'channels'));

观点:

{!! Form::Label('Select Channel') !!}
<select>
@foreach($channels as $channel)
<option value="{{$channel->channel_name}}">{{$channel->id}}</option>
@endforeach
</select>

我是如此无能为力的原因。我的问题是,是否不可能将数据从多个表传递到视图,就像我在Laravel的代码片段中所做的那样?我想相信在Laravel 5.1中必须有一种方法可以解决这个问题但是怎么做?检查了文档,看到很多博客帖子都让我无处可去。任何人都可以救我这种痛苦.....谢谢

3 个答案:

答案 0 :(得分:1)

要访问数组中的元素,请使用数组表示法:$channel['channelname']$channel['id']通过执行此操作:$channel->channel_name,您尝试访问对象属性。

答案 1 :(得分:1)

启动Laravel 5.1,lists方法现在返回一个集合而不是一个数组。调用all()将其转换为数组。资料来源:http://laravel.com/docs/5.1/upgrade

虽然看到您正在使用表单生成器,但您可以简单地使用select方法,让它为您处理。然后,您可以将代码简化为:

{!! Form::label('Select Channel') !!}
{!! Form::select('channel', $channels) !!}

将“频道”更改为您正在使用的输入名称。

答案 2 :(得分:1)

lists方法返回一个关联数组,其中值来自作为第一个参数(channel_name)传递的列,而来自列的项键作为第二个参数传递({{ 1}})。因此,在您的情况下,您将获得一个具有以下结构的数组:

id

这意味着在使用['id' => 'channel_name'] 进行迭代时,您需要使用数组的键作为id,将值作为通道名称。你也已经关掉了显示的值和文本,所以值应该是ID而不是名称,除非你想要一个让你选择ID的下拉列表:

@foreach

您可以在{{3>} Laravel文档中的“检索列值列表”子部分中详细了解<select> @foreach($channels as $id => $name) <option value="{{ $id }}">{{ $name }}</option> @endforeach </select> 方法的工作原理。