我有一个与用户有这种关系的posts模型:
public function author()
{
return $this->belongsTo(User::class, 'user_id');
}我正在构建一个搜索函数,我有以下代码
public function index(Request $request)
{
$search = $request->search;
$filter = $request->filter;
$append = array();
$posts = Post::with('author')->with('categories')->latest();
if($search){
switch ($filter) {
case 'username':
$posts->author->where('username', 'LIKE', '%'. $search . '%');
break;
}
$append += array('search' => $search);
$append += array('filter' => $filter);
}
$posts = $posts->paginate(3);
$posts->appends($append);
return view('core.blog.posts.index', compact('posts'));
}我得到了
未定义的属性:照明\数据库\雄辩\Builder::$author
如何根据作者的用户名添加在哪里查找作者?我必须能够在if情况下添加此条件。
发布于 2017-03-16 21:21:31
您希望使用whereHas()来实现基于关系的搜索。这将只返回带有用户名的作者的帖子。
switch ($filter) {
case 'username':
$posts->whereHas('author', function($q) use($search) {
$q->where('username', 'LIKE', '%'. $search . '%');
});
break;
}发布于 2017-03-16 19:36:11
更新
如果需要有条件的where,可以这样做:
$postSelector = Post::with('categories');
if($search){
switch ($filter) {
case 'username':
$postSelector->with(['author' => function($q) use($search) {
$q->where('username', 'LIKE', '%'. $search . '%');
}]);
break;
}
$posts = $postSelector->get();https://stackoverflow.com/questions/42842968
复制相似问题