2013-03-22 4 views
2

У меня есть две таблицы в моей базе данных. Члены и члены. Я создал для него две модели. one is, Member and another Member MemberРезультаты разбивки на фильтрацию по столбцу, содержащемуся в столбце

Модель участника имеет hasMany отношение к Memberitem, а модель Memberitem принадлежит отношениям с моей моделью-членом.

Элементы-члены имеют определенную категоризацию, основанную на цвете, например, Красный, Розовый, Зеленый и т. Д. Теперь я хочу выбрать всех членов, у которых по крайней мере один элемент с розовым цветом, используя разбивку на страницы.

В настоящее время я использую:

$this->paginate = array(
    'limit' => 5, 
    'contain' => array(
     'Memberitem' => array(
      'conditions' => array('Memberitem.color' => 'Pink') 
     ) 
    ) 
); 

Но его показ всех членов.

выход заключается в следующем:

Array 
(
[0] => Array 
    (
     [Member] => Array 
      (
       [id] => 1 
       [first_name] => fh 
       [last_name] => g 
      ) 

     [Memberitem] => Array 
      (
       [0] => Array 
        (
         [id] => 1 
         [name] => item2 
         [color]=> Pink 
        ) 
      ) 

    ) 

[1] => Array 
    (
     [Member] => Array 
      (
       [id] => 2 
       [first_name] => ad 
       [last_name] => vd 
      ) 

     [Memberitem] => Array 
      (
      ) 

    ) 

[2] => Array 
    (
     [Member] => Array 
      (
       [id] => 3 
       [first_name] => ae 
       [last_name] => sdi 
      ) 

     [Memberitem] => Array 
      (
       [0] => Array 
        (
         [id] => 3 
         [name] => item1 
         [color]=> Pink 
        ) 

      ) 

    ) 

) 

его показ этого результата. Член пустого элемента все еще существует. Я хочу получить только 1 и 3 записи.

+0

Вы получили это решение? – antoniovassell

ответ

0

Это классика :-) Требуется некоторое время, чтобы получить его.

Руководство по тортам отлично подходит для этого. Вы должны прочитать: http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html#containing-deeper-associations

Итак, если вы хотите, чтобы только члены с определенными элементами MemberItems, вы должны запрашивать элементы MemberItems и содержать модель Member. Вы действительно можете сделать это от модели пользователя:

$this->Member->Memberitem->find('all', array(
    'conditions' => 'Memberitem.color = "Pink"', 
    'contain' => 'Member', 
)); 

или, может быть, немного больше обслуживали вам приложение:

$this->paginate['Memberitem'] = array(
    'contain' => array('Member'), 
    'conditions' => array(
     'Memberitem.color' => 'Pink', 
    ), 
); 
$items = $this->paginate('Memberitem'); 

Надежда, что помогает!

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