搜索哪里有

时间:2020-02-07 00:11:59

标签: laravel eloquent laravel-6

所以我有一个Post表,其中每个帖子都在一个相册中,我想按post属性搜索,还要查看该帖子的相册,我该怎么做?

我尝试在控制器中使用它

$posts = album::whereHas('post', function($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

但是问题是它给了我所有的专辑,甚至没有这张专辑的。我的英语不是最好,但我希望你能听懂

3 个答案:

答案 0 :(得分:0)

将此添加到您的Post模型中: Array,它假设将相册模型添加到从数据库中检索到的每个帖子中。如果关系方法(在Post模型中)的名称与String不同,请相应地更改此数组。

然后只使用此查询:

Dictionary

并像这样迭代:

$with = ['album'];

答案 1 :(得分:0)

按如下所示更改查询:

$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

编辑:

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

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

答案 2 :(得分:0)

 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'));
    }
相关问题