Получение значений из нескольких таблиц с использованием ассоциаций модели CakePHP - PullRequest
2 голосов
/ 21 февраля 2012

У меня есть ProductsController, в котором я получаю данные о Продуктах, и мне также необходимо получить Название категории. (Примечание. В таблице «Мои продукты» указан только Category_ID), как я могу это сделать, используя ассоциации моделей CakePHP?

Я видел примеры, в которых идентификатор основной таблицы данных (в моем случае, таблицы «Продукты») является внешним ключом в связанной таблице. Однако мой случай немного отличается тем, что Category_ID (из вторичной таблицы) является частью главной таблицы (таблица Products).

Я не могу получить имя категории, используя конфигурацию модели CakePHP. Вы можете помочь?

Мой ProductsController находится на столе продуктов, который имеет

ID
Prod_Name
Category_ID
....

Моя таблица категорий похожа на

ID
Cat_Name

В моем ProductsController я хочу получить Cat_Name для извлекаемых продуктов.

Ответы [ 2 ]

6 голосов
/ 21 февраля 2012

В вашей модели продукта используйте ассоциацию:

var $belongsTo = array(
    'Category' => array(
        'className' => 'Category',
        'foreignKey' => 'category_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

При получении данных о ваших продуктах используйте find метод:

$this->set('variable', $this->Product->find('all'));

Как только он появится в вашем представлении, это массив, содержащий все товары и его категорию. Как это:

<?php
foreach($variable as $itemInTable):
    echo 'Product:' . $itemInTable['Product']['Prod_Name'];
    echo 'Its Category:' . $itemInTable['Category']['Cat_Name'];
endforeach;
?>
1 голос
/ 21 февраля 2012

fzmaster ответ правильный. Когда у вас есть внешний ключ в Таблице A, который соответствует идентификатору в Таблице B, говорят, что Модель A «принадлежит» Модели B. В то же время, может быть обратное отношение, где Модель B «имеет много» Модель As.

Ассоциации довольно просты в этом контексте, и если вы используете Соглашения по именованию тортов , вы можете связать модели с минимальным дополнительным кодом:

class Product extends AppModel{
    var $belongsTo = array( 'Category' );
}

class Category extends AppModel{
    var $hasMany = array( 'Product' );
}

В этот момент метод CakePHP Model::Find() автоматически извлекает связанные модели, если вы не ограничите его $recursive или с помощью поведения Containable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...