Laravel запрос по внешнему ключу - PullRequest
0 голосов
/ 08 июля 2019

У меня есть следующая структура.Пока пользователь регистрируется, он выбирает страну.он создает пост.Я хочу найти все сообщения определенной страны, в которой есть ключевое слово для поиска.Ключевым словом поиска может быть название, модель, цена чего угодно.Он отлично работает.

Однако я также хочу иметь возможность искать имена производителей.Но в отличие от других полей, имя make не сохраняется непосредственно в моей таблице, оно сохраняет идентификатор для выбора имени make из другой таблицы.

Как мне выполнить поиск по марке?

Модель - отношение POsts.Модель сообщения:

class Post extends Model
{
    protected $table = 'posts';

    protected $dates = ['status_change'];

    public function make_rel()
    {
        return $this->belongsTo(Make::class, 'make_id' ,'id','make_logo');
    }

}

Так что в основном я создаю сообщение.Во время создания я могу выбрать марку.Почтовый стол сохраняет мак ID.Марка сохраняется в другой таблице как Id, имя_клима.

Таблица макетов: Make Table

Стол сообщений:

Post Table

Теперь я хочу сделать запрос к таблице сообщений на основе make:

$posts = Country::where('country_name', $request->input('country'))->first()->posts()->orderBy('status_change','DESC')
        ->where('status','Published')
        ->where(function($query) use ($search){
            $query->where('title','LIKE','%'.$search.'%');
            $query->orWhere('model','LIKE','%'.$search.'%');
            $query->orWhere('notes','LIKE','%'.$search.'%');
            $query->orWhere('description','LIKE','%'.$search.'%');
        })
        ->paginate(25);
        }

1 Ответ

1 голос
/ 08 июля 2019

Вы можете использовать whereHas для этого. В вашем ->where(function($query) use ($search){ блоке:

->orWhereHas('make_rel', function($query) use($search) {
    $query->where('make_name','LIKE','%'.$search.'%');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...