如何在Laravel中只找到一条记录时如何防止未定义的属性

时间:2017-12-04 08:36:48

标签: laravel laravel-5 laravel-eloquent

我尝试制作搜索功能,所以我这样做:

public function search(Request $request)
{
    $query = $request->query('q');

    $posts = DB::table('posts')->where('title', 'LIKE',  '%'.$query.'%')->get();

    return view('admin.dashboard.search')->with('users',$users)->with('posts',$posts);
}

但是当我尝试获取结果时,我遇到了一些错误:

  

未定义属性:stdClass :: $ user(查看:   E:\ laragon \ WWW \博客\资源\视图\管理员\仪表板\ search.blade.php)

这一行是错误的:

<td><?php echo e($post->user->name); ?></td>

那我该如何解决呢?

3 个答案:

答案 0 :(得分:2)

您必须在搜索查询中急切加载用户,如下所示:

$posts = App\Post::with('user')
                   ->where('title', 'LIKE', '%'.$query.'%')
                   ->get();

答案 1 :(得分:1)

您需要先在查询中设置with['user']

$posts = App\Post::with('user')->where('title', 'LIKE', '%'.$query.'%')->get();

然后你可以在你的视图中得到它:

<td>{{ $post->user->name ? $post->user->name : 'No User Found'  }}/td>

希望这能帮到你!

答案 2 :(得分:0)

您可以执行类似

的操作
<td>{{ $post->user->name ? $post->user->name : 'No User Found'  }}/td>

这应该有效