试图获取非对象的属性“ post_title”

时间:2019-02-21 09:26:05

标签: laravel

控制器

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'

6 个答案:

答案 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>

在您的情况下无需使用循环