2016-10-21 3 views
1

У меня есть таблица элементов, которая содержит информацию об элементах. Кроме того, у меня есть еще 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

ответ

1

Если я понимаю вас вопрос правильно, я думаю, что вы хотите whereHas например,

$items = Item::with('imagenes') 
     ->whereHas('tallas', function ($query) use ($dataFilter) { 
      $query->where('id', '=', $dataFilter['filter-size']); 
     }); 

https://laravel.com/docs/4.2/eloquent#querying-relations

Надеется, что это помогает!

+0

спасибо за ваш ответ, это помогло бы, если бы я использовал laravel 5, извините за то, что не упоминал об этом раньше, im используя laravel 4.2 –

+0

@CarlosSalazar 'whereHas' по-прежнему доступен в 4.2. Я обновил ссылку в своем ответе. –

+0

IT WORK благодарит вас, вы лучшие !!! –

Смежные вопросы