Laravel 搜索哪里有
所以我有一个Post表,每个Post都在一个相册中,我想通过Post属性进行搜索,但也要查看Post的相册,我该怎么做 我试过在控制器中使用这个Laravel 搜索哪里有,laravel,eloquent,laravel-6,Laravel,Eloquent,Laravel 6,所以我有一个Post表,每个Post都在一个相册中,我想通过Post属性进行搜索,但也要查看Post的相册,我该怎么做 我试过在控制器中使用这个 $posts=album::whereHas('post',函数($q)use($search){ $q->where('nama'、'like'、“%$search%”、'or')->where('deskripsi'、'like'、“%$search%”); })->get(); 这是我的刀片视图,先显示相册,然后显示帖子 @foreach($p
$posts=album::whereHas('post',函数($q)use($search){
$q->where('nama'、'like'、“%$search%”、'or')->where('deskripsi'、'like'、“%$search%”);
})->get();
这是我的刀片视图,先显示相册,然后显示帖子
@foreach($posts as $p )
.....
@foreach($p->post->where('nama', 'like', "%$search%", 'or')->where('deskripsi', 'like', "%$search%") as $post)
....
@endforeach
@endforeach
但问题是它给了我所有的专辑,即使是没有贴子的那张。我的英语不是最好的,但我希望你能理解它在你的帖子模型中添加以下内容:
$with=['album']代码>,它假设将相册模型添加到从数据库检索到的每一篇文章中。如果关系方法(在Post模型中)的名称与相册不同,请相应地更改此数组
然后使用以下查询:
$posts = Post::where('nama', 'like', "%$search%")->orWhere('deskripsi', 'like', "%$search%")
->get();
然后像这样迭代:
@foreach($posts as $p)
{{ $p->album->title }}
@endforeach
更改您的查询,如下所示:
$albums = album::whereHas('post', function($q) use ($search) {
$q->where('nama', 'like', '%'.$search.'%')
})
->orWhereHas('post', function($q) use ($search) {
$q->where('deskripsi', 'like', '%'.$search.'%')
})
->get();
$albums = album::with('post)->whereHas('post', function($q) use ($search) {
$q->where('nama', 'like', '%'.$search.'%')
})
->orWhereHas('post', function($q) use ($search) {
$q->where('deskripsi', 'like', '%'.$search.'%')
})
->get();
在你看来,查涅:
@foreach($albums as $album )
..... // display here album data
@foreach($album->post as $post)
.... // display here post data
@endforeach
@endforeach
编辑:
在相册模型中,为帖子定义新关系:
public function searchedPosts($search = null)
{
$posts = $this->hasMany('App\Post'); // your model path
if($search!=null){
$posts->where('nama', 'like', '%'.$search.'%')->orWhere('deskripsi', 'like', '%'.$search.'%');
}
return $posts;
}
更改您的查询,如下所示:
$albums = album::whereHas('post', function($q) use ($search) {
$q->where('nama', 'like', '%'.$search.'%')
})
->orWhereHas('post', function($q) use ($search) {
$q->where('deskripsi', 'like', '%'.$search.'%')
})
->get();
$albums = album::with('post)->whereHas('post', function($q) use ($search) {
$q->where('nama', 'like', '%'.$search.'%')
})
->orWhereHas('post', function($q) use ($search) {
$q->where('deskripsi', 'like', '%'.$search.'%')
})
->get();
更改您的视图,如下所示:
@foreach($albums as $album )
..... // display here album data
@foreach($album->searchedPosts($search)->get() as $post)
.... // display here post data
@endforeach
@endforeach
好的,这是工作,所以我要接受这一点,但我如何显示只有$search在他们的nama或deskripsi?谢谢,这是一个改进,但现在它在另一张专辑中显示了帖子。例如,在专辑1中,只有2个结果,但它显示了所有结果,甚至第三个结果也是专辑2的结果,所以专辑2也给出了所有3个结果,我希望你能理解这一点,对于noob问题,我很抱歉,我刚开始进入laravel。