搜索哪里有

Search Where Has

所以我有一个 Post table,其中每个 post 都在一个相册中,我想通过 post 属性进行搜索,但还要带上 post 的相册在查看中,我该怎么做?

我试过在控制器中使用它

$posts = album::whereHas('post', function($q) use ($search) {
            $q->where('nama', 'like', "%$search%", 'or')->where('deskripsi', 'like', "%$search%");
        })->get();

这是我的 blade 视图,首先显示专辑,然后 post

@foreach($posts as $p )
.....
    @foreach($p->post->where('nama', 'like', "%$search%", 'or')->where('deskripsi', 'like', "%$search%") as $post)
    ....
    @endforeach
@endforeach

但问题是它给了我所有的专辑,甚至是没有 post 的专辑。我的英语不是最好的,但我希望你能理解

将此添加到您的 Post 模型中: $with = ['album'];,它假设将相册模型添加到从数据库中检索到的每个 post。如果关系方法(在 Post 模型中)的名称与 album 不同,请相应地更改此数组。

然后只需使用此查询:

$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();

你眼中的沙涅:

@foreach($albums as $album )
..... // display here album data
    @foreach($album->post as $post)
    .... // display here post data
    @endforeach
@endforeach

编辑:

在您的相册模型中,为 post 定义新关系:

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::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
 public function search(Request $request)
    {
        $query = $request->input('query');
        $posts = Post::where('title','LIKE',"%$query%")
            ->approved()->publish()->get();
        return view('FrontPage.search',compact('posts','query'));
    }