У меня есть таблица элементов, которая содержит информацию об элементах. Кроме того, у меня есть еще 3 таблицы для некоторых характеристик, которые могут иметь более одного.Как фильтровать запрос с использованием связей laravel
Следит пример:
table items
-----------------------
| id | price | stock |
-----------------------
| 1 | 19 | 99 |
-----------------------
table tallas
-----------------------------
| id | item_id| description |
-----------------------------
| 1 | 1 | large |
-----------------------------
table colors
-----------------------------
| id | item_id| description |
-----------------------------
| 1 | 1 | blue |
-----------------------------
table materials
-----------------------------
| id | item_id| description |
-----------------------------
| 1 | 1 | cotton |
-----------------------------
Я хочу знать, если есть способ, где я могу фильтровать элемент, проходящий в item_id
к tallas
отношений без использования join
(например).
Моя модель выглядит следующим образом:
<?php
class Item extends Eloquent{
use Conner\Tagging\TaggableTrait;
public function tallas()
{
return $this->hasMany('Talla','item_id');
}
public function colores()
{
return $this->hasMany('Color','item_id');
}
public function materiales()
{
return $this->hasMany('Material','item_id');
}
public function imagenes()
{
return $this->hasMany('ItemImage','item_id');
}
}
И я попытался это:
$items = Item::with('imagenes')
->with(array('tallas' => function($query) use($dataFilter) {
$query->where('id','=',$dataFilter['filter-size']);
}));
Но это возвращение всех деталей и фильтровать tallas
, используя пример таблицу, если я искать item small
он вернет что-то вроде этого.
[item]{
id:1,
price:19,
stock:99,
tallas:
[]...
colores:
[]...
materiales:
[]...
}
Не должен возвращать товар, никакой помощи?
EDITED
я забыл упомянуть, я использую Laravel 4,2
спасибо за ваш ответ, это помогло бы, если бы я использовал laravel 5, извините за то, что не упоминал об этом раньше, im используя laravel 4.2 –
@CarlosSalazar 'whereHas' по-прежнему доступен в 4.2. Я обновил ссылку в своем ответе. –
IT WORK благодарит вас, вы лучшие !!! –