#php #cakephp #cakephp-model
#php #cakephp #cakephp-модель
Вопрос:
У меня есть следующие три таблицы базы данных:
Products
########
id
title
artist_id
Arists
######
id
profile
person_id
People
######
id
first_name
last_name
В моей Product
модели, как мне создать метод для возврата продукта title
вместе с продуктом исполнителя first_name
?
Я настроил следующие ассоциации моделей:
Product belongs to Artist
Artist belongs to Person
Ответ №1:
Containable, безусловно, подходит для фильтрации связанных записей. Обязательно добавьте $ actsAs = array(‘Containable’) в свою модель или app_model.
Затем вы можете делать такие вещи, как:
$this->Product->find('all', array(
'contain' => array(
'Artist' => array(
'Person' => array(
'id',
'first_name'
)
)
)
));
Ответ №2:
Предполагая, что вы уже установили отношения в этих моделях, вам просто нужно установить это recursive
:
$this->Product->recursive = 2;
print_r($this->Product->find('all'));
Комментарии:
1. Каков фактический синтаксис для простого повторения первого имени?
2. Смотрите
print_r
, чтобы увидеть путь. Если вы используете$products = $this->Product->find('all')
, я предполагаю, что это будет в$products[0]['Artist']['People']['first_name']
.3. Работает с использованием
$products[0]['Artist']['Person']['first_name']
, но при использовании этого метода извлекается много ненужных данных, есть ли лучший способ сделать это?4. Вы можете использовать
fields
, чтобы выбрать, какие поля следует извлекать. Смотрите больше здесь nuts-and-bolts-of-cakephp.com/2008/08/06 /…5. Думаете, что сдерживаемое поведение может быть правильным решением?