Home PageКаталог Изменения НовыеКомментарии Пользователи Регистрация
CakePHP: Manual/Developing/Models/Associations ...
Это старая версия Manual/Developing/Models/Associations за 2009-02-24 20:51:33..

Ассоциации: связывание моделей


Одной из самых мощных особенностей CakePHP является способность создавать реляционные связи, предоставляемая моделью. В CakePHP, связи между моделями осуществляются с помощью ассоциаций.


Определение связей между различными объектами в вашем приложении должно быть естественным процессом. Например: рецепт может иметь много оценок, оценки принадлежат (поставлены) авторами, и авторы могут иметь много рецептов. Определив каким образом эти связи будут работать, вы легко сможете получить доступ к вашим данным.


Цель этого раздела – показать как определять и использовать ассоциации между моделями в CakePHP.


Данные могут получаться из разных источников. Наиболее распространенная форма хранения в веб-приложениях – это реляционная база данных. Об этом и пойдет речь в этом разделе.



Типы ассоциаций


В CakePHP существует четыре типа ассоциаций: hasOne, hasMany, belongsTo, hasAndBelongsToMany (HABTM).


Связь Тип ассоциации Пример
один к одному hasOne Пользователь имеет один профиль
один ко многим hasMany Пользователь имеет много рецептов
многие к одному belongsTo Рецепты принадлежат пользователю
многие ко многим hasAndBelongsToMany Рецепты имеют и принадлежат множеству тегов

Ассоциации определяются созданием переменной класса, имя которой совпадает с названием, определяемой вами, ассоциации. Эта переменная может быть простой, как строка, а может быть сложной, как многомерный массив, используемый для определения особенностей ассоциации.


<?php

class User extends AppModel {
    var 
$name 'User';
    var 
$hasOne 'Profile';
    var 
$hasMany = array(
        
'Recipe' => array(
            
'className'  => 'Recipe',
            
'conditions' => array('Recipe.approved' => '1'),
            
'order'      => 'Recipe.created DESC'
        
)
    );
}
?>


В приведенном примере в строке 'className' => 'Recipe', 'Recipe' – это алиас. Это идентификатор для связи и может быть любым. Обычно, вы будете выбирать такое же имя, которое имеет класс, на который ссылается данный класс. Алиасы должны быть уникальными как для отдельных моделей, так и с двух сторон связей belongsTo/hasMany или belongTo/hasOne. Выбор не уникальных имен для алиасов моделей, может стать причиной непредсказуемого поведения.


CakePHP будет автоматически создавать связи между ассоциируемыми объектами моделей. Таким образом, например, в вашей модели User вы можете получить доступ к модели Recipe:


<? $this->Recipe->someFunction(); ?>


Подобным образом, в вашем контроллере вы можете получить доступ к ассоциируемым моделям, без добавления их в массив $uses:


<? $this->User->Recipe->someFunction(); ?>



 
Комментарии
Может быть, в HABTM кейк создаст модель Recipes Tags?, а не Recipes Tag??
80.64.175.115.sta.211.ru (2009-07-09 13:51:17)
HABTM выносит мозк :)
214.206.150.178.triolan.net (2012-01-22 16:57:10)
Добавить комментарий:

Файлов нет. [Показать файлы/форму]