Опишу эту ситуацию с более подробной информацией:Laravel Eloquent: как фильтровать отзывы продуктов по категориям продуктов и/или бренду?
У меня есть список продуктов, в которых каждый товар относится к определенной категории и к определенной марке. Некоторые из продуктов могут быть просмотрены пользователями.
В обзоре/странице в моем приложении Laravel, у меня есть список обзоров и выберите поля для категории и бренда вместе с кнопкой поиска, конечно.
Если вы не выбрали категорию или бренд, все обзоры будут отображаться, разбиваться на страницы, и это хорошо.
Проблема возникает, когда пользователь выбирает категорию или бренд или и то, и другое, и пытается получить все отзывы, отфильтрованные таким образом.
Reviews table fields: ID, user_id(foreign key users.ID), product_id(foreign key products.ID), text
Products table fields: ID, category_id(foreign key categories.ID), brand_id(foreign key brands.ID), name
Categories table fields: ID, name
Brands table fields: ID, name
Users table fields: ID, username
Когда я перечисляю отзывы, я просто с помощью:
$reviews = Review::orderBy('id', 'DESC')->paginate(5);
Если я хотел бы фильтровать обзоры user_id, что будет легко, как таблица содержит обзоры user_id колонки, но как их фильтровать по категориям продуктов и/или бренду продукта?
Вот обзор, продукта и категории модели:
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Review extends Model {
protected $fillable = [];
public function product() {
return $this->belongsTo('App\Product');
}
public function user() {
return $this->belongsTo('App\User');
}
}
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Product extends Model {
protected $fillable = [];
public function user() {
return $this->belongsTo('App\User');
}
public function reviews() {
return $this->hasMany('App\Review');
}
public function category() {
return $this->belongsTo('App\Category');
}
}
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Category extends Model {
protected $fillable = [];
public function products() {
return $this->hasMany('App\Product');
}
}
Если я использую соединения, то $ Обзор-> user-> идентификатор, $ Обзор-> user-> имя пользователя, $ Обзор-> идентификатор являются Неправильно, я получаю review.product_id как $ review-> id и products.user_id как $ review-> user-> id в шаблоне клинка.
Я пытался это присоединиться вариант:
$reviews_query = Review::orderBy('reviews.id', 'DESC')
->Join('products', 'reviews.product_id', '=', 'products.id')
->Join('categories', 'products.category_id', '=', 'categories.id')
->Join('brands', 'products.brand_id', '=', 'brands.id')
->Join('users', 'reviews.user_id', '=', 'users.id')
->where('reviews.active', '=', 1)
->GroupBy('reviews.id')->paginate(5);
И это для фильтрации по CATEGORY_ID:
if (Input::has('category_id')){
$category_id = Input::get('category_id');
$reviews_query->where('categories.id', $category_id);
}
Я не знаю, как правильно решить неоднозначные идентификаторы таких нас product_id, review_id, user_id в шаблоне клинка ($ review-> id, $ review-> user-> id, все перепутаны друг с другом)
где вы храните отзыв ...? –
Как вы это понимаете?В таблице базы данных отзывов – mpet
так просто проверьте, что где хранится конкретный товарный обзор или нет .. ?? вы можете получить только тот продукт –