Я пытаюсь познакомиться с красноречивым, и я играл с некоторыми глобальными областями запросов, но у меня нет большого успеха, когда дело доходит до того, что он о взаимоотношениях.Глобальный охват запросов и отношения с Laravel 5
У меня есть две модели; продукт и категория, каждая из которых добавляет некоторые глобальные области запросов.
продукты:
use productConditions;
protected $table = 'product';
public $timestamps = false;
private $websiteDetails;
public function __construct(){
parent::__construct();
$this->websiteDetails = session('website');
}
public function scopeByCategory($query, $categoryId){
return $query->whereHas('categories', function($q) use ($categoryId){
$q->where('id', $categoryId);
});
}
public function categories(){
return $this->belongsToMany('App\Category', 'product_category', 'product_id', 'category_id');
}
Категория:
use categoryConditions;
protected $table = 'category';
public $timestamps = false;
public function products() {
return $this->belongsToMany('App\Product', 'product_category', 'category_id', 'product_id');
}
Я использую черты для загрузки глобальных областей и файлы следующим образом:
Так что для продуктов:
public function apply(Builder $builder, Model $model)
{
$builder->where('state', 'a');
$builder->where('stock_level', '>', 0);
}
public function remove(Builder $builder, Model $model){
$query = $builder->getQuery();
foreach((array) $query->wheres as $key => $where){
if($where['column'] == 'state'){
unset($query->wheres[$key]);
}
if($where['column'] == 'stock_level'){
unset($query->wheres[$key]);
}
}
$query->wheres = array_values($query->wheres);
}
и для категорий
public function apply(Builder $builder, Model $model)
{
$websiteDetails = session('website');
$builder->where('website_id', $websiteDetails['id']);
}
public function remove(Builder $builder, Model $model){
$query = $builder->getQuery();
foreach((array) $query->wheres as $key => $where){
if($where['column'] == 'website_id'){
unset($query->wheres[$key]);
}
}
$query->wheres = array_values($query->wheres);
}
Поскольку существует несколько записей для поля категории с определенным идентификатором, из-за лицом, что есть несколько профилей веб-сайтов. Я хотел установить глобальную область запроса для категорий -> site_id.
Так что это прекрасно работает, делая некоторые, как это:
$category = Category::with('products')->first();
$category->products;
Он получает все категории с указанным website_id, а затем тянет в продуктах.
Однако, когда я настраивал область запроса в модели, это не сработало, чтобы сделать практически то же самое, но наоборот. Таким образом, это не работает:
$category = Product::byCategory(2)->get();
Если я не удалить глобальный масштаб запросов в категории модели и модификации закрытия whereHas для:
public function scopeByCategory($query, $categoryId){
return $query->whereHas('categories', function($q) use ($categoryId){
$q->where('id', $categoryId)->where('website_id', $this->websiteDetails['id']);
});
}
, но делает это так, значит, я могу больше не запрашивает модель категории, не настраивая какой-либо метод области запроса веб-сайта.
Может кто-нибудь сказать мне, если я как-то ошибаюсь или предлагаю другое решение моей проблемы.
Большое спасибо