控制器
public function update_homepage(){
$contents = DB::table('posts')->select('post_title','post_excerpt')
->latest()
->first();
return view('index', ['contents' => $contents]);
}
索引视图
@foreach ($contents as $details)
<h4>{{$details->post_title}}</h4>
@endforeach
我收到一个错误:
试图获取非对象的属性'post_excerpt'
答案 0 :(得分:0)
应用\DB::table()->first()
时,它会为您提供一个stdClass
对象,而不是数组/迭代器。
因此,您无需在刀片中进行foreach操作,就可以直接访问{{ $contents->post_title }}
如果您使用\DB::table()->get()
,它将为您提供一个包含所有以stdClass
对象表示的行的数组。
答案 1 :(得分:0)
您正在使用first()
检索一条记录,因此变量$contents
不是记录的集合,而是一条记录。
因此,当您使用foreach遍历内容时,就不会遍历对象集合。
尝试这样更改视图:
<h4>{{$contents->post_title}}</h4>
答案 2 :(得分:0)
试图获取非对象的属性“ post_title”
当您尝试从空对象获取属性时,该对象为空时将显示此错误。因此,请确保数组中包含对象,并且每个对象中都包含post title属性。
答案 3 :(得分:0)
first()
方法将仅给出第一条匹配记录,因此您将仅获得一个对象。使用get()
而不是先获取所有匹配记录为
public function update_homepage(){
$contents = DB::table('posts')->select('post_title','post_excerpt')
->latest()
->get();
return view('index', ['contents' => $contents]);
}
然后以
遍历您的收集结果@foreach ($contents as $details)
<h4>{{$details->post_title}}</h4>
@endforeach
答案 4 :(得分:0)
对不起,我的回复很晚
更新的功能
public function update_homepage()
{
$selectArray = ['post_title','post_excerpt'];
$tableName = 'posts';
$postContentsAll = DB::table($tableName)
->select($selectArray)
->latest()
->get();
$postContentsFirst = DB::table($tableName)
->select($selectArray)
->latest()
->first();
dd($postContentsAll,$postContentsFirst);
$viewShareVars = ['postContentsAll','postContentsFirst'];
return view('index', compact($viewShareVars));
}
说明
first()方法
如果您使用的是first()
方法,它将返回对象,而不是 COLLECTION
因此在视图中,您无法iterate
foreach
只需{{ $postContentsFirst->post_title}}
get()方法
如果您使用的是get()
方法,它将返回 COLLECTION
因此在视图中,您可以iterate
foreach
做到这一点
@foreach($postContentsAll as $item)
<tr>
<td>{{ $loop->post_title }}</td>
<td>{{ $item->post_excerpt }}</td>
</tr>
@endforeach
但情况仍然
试图获取非对象的属性“ post_title”
原因
您仅 SELECTING
'post_title','post_excerpt'
posts
中如果您尝试访问其他文件,则可能会获得
试图获取财产
OR
未定义的属性:stdClass :: $ propertyName
如果您要使用我的功能,别忘了删除
dd($postContentsAll,$postContentsFirst);
希望对我的英语感到抱歉
答案 5 :(得分:0)
只需使用
<h4>{{$contents ->post_title}}</h4>
在您的情况下无需使用循环