Как показать данные из разных связанных моделей в cakephp?

Я новичок в CakePHP и пытаюсь создать простое веб-приложение.

У меня есть 3 модели: свойство, операция и категория.

Мои отношения:

Category -> hasMany -> Property
Operation -> hasMAny -> Property

каждое свойство имеет внешний ключ для категории (cat_id) и для операции (op_id).

Что я хочу сделать, так это показать каждое свойство (в соответствующем представлении) с ИМЯ категории и операции (поле «имя» в соответствующих таблицах), а не идентификатор. Как я могу это сделать?

ОБНОВИТЬ:

Примером желаемого результата может быть:

ID    category    operation description ....

1     House       Sell       a house   ....

То, что у меня есть сейчас

ID    category    operation description ....

 1     2          3           a house   ....

2 и 3 — это соответствующие идентификаторы «дома» (категория, cat_id) и «продажи» (операция, op_id).

Это код модели категории:

class Category extends AppModel{
    public $hasMany = array(
    'Property'=>array(
        'foreignKey' => 'cat_id'
    ));
}

Заранее спасибо.


person sebastianb    schedule 18.06.2013    source источник
comment
Я не понимаю, что именно вы хотите сделать. Вам нужно получить название Category и PropertyOperation в одном запросе?   -  person Ziemo    schedule 18.06.2013
comment
пожалуйста, напишите ожидаемый результат и добавьте код моделей.   -  person Moyed Ansari    schedule 18.06.2013
comment
Вы также можете написать запрос, с помощью которого вы получите указанный результат?   -  person Ziemo    schedule 18.06.2013


Ответы (2)


свойства (идентификатор, имя, ид_категории, ид_операции)

категории (идентификатор, имя)

операции(идентификатор, имя)

когда вы выполняете поиск в таблице свойств с рекурсивным = 1 или 2, вы автоматически получаете все связанные данные

person Harsha M V    schedule 19.06.2013

Решение найдено! Легче, чем я думал.

Во-первых, использование hasMany не было идеальным. Что я сделал, так это использовал отношение «принадлежит» в модели свойств:

class Property extends AppModel{
    var $name = 'Property';
    public $belongsTo = array(
        'Category' => array(
            'foreignKey' => 'idCat'         
        ),
        'Operation' => array(
            'foreignKey' => 'idOp'              
        )
    );
}

Теперь волшебство: всякий раз, когда я выполняю find() в PropertiesController, у меня получается двумерный массив, который содержит данные свойства вместе с данными таблиц, которым он принадлежит. :

Array
(
   [Property] => Array
        (
        [id] => 1
    )
[Category] => Array
    (
        [id] => 2
        [name] => House
    )
[Operation] => Array
    (
        [id] => 3
        [name] => Sell
    )

) Теперь в представлении вместо, например, ['Property']['idCat'] я просто использую ['Category']['name'] и все работает.

Спасибо за помощь!

P.S.: извините за недопонимание, не носитель языка.

person sebastianb    schedule 19.06.2013