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

#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. Думаете, что сдерживаемое поведение может быть правильным решением?