Laravel: поисковый запрос в отношениях - PullRequest
0 голосов
/ 04 июня 2018

Когда я добавляю новый пост в мое приложение, на добавление одного поста влияет 7 tables.Чтобы получить все сообщения со всеми данными, мой простой запрос выглядит так:

$userPost   = Post::with(['product','postattribute.attribute.category','user.userDetails'])
                        ->offset($offset)
                        ->limit($limit)
                        ->whereStatus("Active")
                        ->whereIn('product_id', $userApprovalProductIDs)
                        ->orderBy('id','desc')
                        ->get();

Таким образом, он перезапускает все данные, которые я хочу.Теперь я хочу реализовать поисковый запрос во всех таблицах, в настоящее время я могу искать только posts таблицы.

Если я выполняю поиск по category таблице с categoryTitle, я пытаюсь кодировать как

where('category.title','=', $serachTitle)

Но в моем случае это не работает.

POST модель отношения:

public function user() {
    return $this->belongsTo(User::class);
}

public function product() {
    return $this->belongsTo(Product::class);
}

public function postattribute() {
    return $this->hasMany(PostAttribute::class);
}

POSTATTRIBUTES модель отношения:

  public function post() {
    return $this->belongsTo(Post::class);
}

 public function attribute() {
    return $this->belongsTo(Attribute::class);
}

ATTRIBUTES модель отношения:

   public function category() {
    return $this->belongsTo(Category::class);
}

 public function attributes() {
    return $this->belongsTo(Attribute::class);
}

Как я могу это сделать?

1 Ответ

0 голосов
/ 04 июня 2018

Чтобы применить фильтр к вашим вложенным отношениям, вы можете использовать whereHas

$userPost   = Post::with(['product','postattribute.attribute.category','user.userDetails'])
    ->offset($offset)
    ->limit($limit)
    ->whereStatus("Active")
    ->whereIn('product_id', $userApprovalProductIDs)
    ->whereHas('postattribute.attribute.category', function ($query) use($serachTitle) {
        $query->where('title', '=', $searchTitle);
    })
    ->orderBy('id','desc')
    ->get();

Запрос наличия отношений

Из комментариев я понял, что вы хотите знатькак искать в каждом отношении для сообщения, я уже добавил пример для поиска с заголовком категории

->whereHas('postattribute.attribute', function ($query) use($var) {
    $query->where('some_field_of_attribute_table', '=', $var);
})

->whereHas('postattribute', function ($query) use($var) {
    $query->where('some_field_of_postattribute_table', '=', $var);
})
...