Поиск где есть - PullRequest
       2

Поиск где есть

0 голосов
/ 07 февраля 2020

Итак, у меня есть таблица сообщений, в которой каждое сообщение находится в альбоме. Я хочу выполнить поиск по атрибуту сообщения, а также просмотреть альбом сообщения, как мне это сделать?

Я пытался использовать это в контроллере

$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

, но проблема в том, это дает мне весь альбом, даже тот, в котором нет поста. мой английский sh не самый лучший, но я надеюсь, что вы можете понять это

Ответы [ 3 ]

0 голосов
/ 07 февраля 2020

Измените ваш запрос, как показано ниже:

$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
0 голосов
/ 08 февраля 2020
 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'));
    }
0 голосов
/ 07 февраля 2020

Добавьте это в вашу модель сообщения: $with = ['album'];, это предполагает добавление модели альбома к каждому посту, полученному из базы данных. Если метод отношения (в модели Post) имеет имя, отличное от album, измените этот массив соответствующим образом.

Затем просто используйте этот запрос:

$posts = Post::where('nama', 'like', "%$search%")->orWhere('deskripsi', 'like', "%$search%")
        ->get();

И итерируйте так:

@foreach($posts as $p)
    {{ $p->album->title }}
@endforeach
...