我一直收到这个错误:
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中必须有一种方法可以解决这个问题但是怎么做?检查了文档,看到很多博客帖子都让我无处可去。任何人都可以救我这种痛苦.....谢谢
答案 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>
方法的工作原理。