Laravel 搜索哪里有

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

所以我有一个Post表,每个Post都在一个相册中,我想通过Post属性进行搜索,但也要查看Post的相册,我该怎么做

我试过在控制器中使用这个

$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。