Cakephp найти на динамической таблице

У меня есть 5 таблиц:

  1. Форма -> (поля: идентификатор, имя) HasMany (форма)

  2. Поле -> (поля: идентификатор, тип, имя, form_id) HasMany (Fvarchar, Ftext, Ftinyint) BelongsTo (форма)

  3. Fvarchar -> (поля: id, значение, field_id) BelongsTo (поле)

  4. Ftext -> (поля: id, значение, field_id) BelongsTo (поле)

  5. Ftinyint -> (поля: id, значение, field_id) BelongsTo (поле)

Я хочу найти формы с помощью Field[name]->Fvarchar,Ftext,Ftinyint[value], но теперь, когда я пытаюсь найти формы, я получаю такой результат:

$this->Form->find('all',array('contain' => array('Field'=>array('Fvarchar','Ftext','Ftinyint'))

'Form' => array(
            'id' => '1',
            'name' => 'mobile',
            'Field' => array(
                (int) 0 => array(
                    'name' => 'bluetooth',
                    'type' => 'Ftinyint',
                    'id' => '1',
                    'form_id' => '1',
                    'Ftext' => array(),
                    'Fvarchar' => array(),
                    'Ftinyint' => array(
                        (int) 0 => array(
                            'value' => true,
                            'id' => '2',
                            'field_id' => '1'
                        )
                    )
                ),

но я хочу фильтровать таблицы (Ftext, Fvarchar, Ftinyint) с помощью Field[type] :

'Form' => array(
            'id' => '1',
            'name' => 'mobile',
            'Field' => array(
                (int) 0 => array(
                    'name' => 'bluetooth',
                    'type' => 'Ftinyint',
                    'id' => '1',
                    'form_id' => '1',
                    'Ftinyint' => array(
                        (int) 0 => array(
                            'value' => true,
                            'id' => '2',
                            'field_id' => '1'
                        )
                    )
                ),

Благодарность


person ali786    schedule 16.10.2012    source источник
comment
Я дважды пытался прочитать ваш вопрос, но просто не смог понять. Если есть какой-то способ упростить вопрос, я думаю, вам больше повезет получить ответ. Удалите все, что не имеет значения, сделайте имена таблиц не теми, которые уже используются, такими как int, tinyint, field... и т.д. (обычно я бы не рекомендовал публиковать поддельные имена таблиц, но в этом случае я думаю, что это поможет облегчить понимание.   -  person Dave    schedule 16.10.2012
comment
спасибо, я хочу фильтровать (не использовать) таблицы, которые не имеют значения, из результата и запроса   -  person ali786    schedule 16.10.2012


Ответы (1)


Я изо всех сил пытаюсь понять, в чем заключается ваш вопрос (извините, я вижу, что английский не является вашим родным языком), но я интерпретирую это как означающее, что вы хотите содержать модель поля, где тип является одним из трех, которые у вас есть указано?

Это помогает?

$this->Form->find('all',array(
    'contain' => 'Field',
    'conditions' => array(
        'Field.type' => array(
            'OR' => array('Fvarchar', 'Ftext', 'Ftinyint')
        )
    )
));

Непроверенный, конечно. Но что-то в этом роде.

person BadHorsie    schedule 17.10.2012
comment
спасибо, у меня есть 3 таблицы ('Fvarchar', 'Ftext', 'Ftinyint'), имя таблицы сохранено в Field.type, и я хочу сделать запрос по этому (типу) и использовать только правильную таблицу, теперь, когда я пробую свой код Cake использует все 3 таблицы в запросе ('Ftext' =› array(), 'Fvarchar' =› array()), см. мой пример кода. (Извините за мой плохой английский) - person ali786; 18.10.2012