<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>CakePHP - Manual/Developing/Models/Associations</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Models/Associations</link>
<description>History/revisions of CakePHP/Manual/Developing/Models/Associations</description>
<language>en-us</language>
<item>
<title>2009-02-28 21:07:36</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Models/Associations/show?time=2009-02-28+21%3A07%3A36</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a name=".manual.developing.models.associations" href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Models&amp;nbsp;/&amp;nbsp;Associations&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-28+21%3A07%3A36">2009-02-28 21:07:36&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations">2009-02-28 21:11:29&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">За&amp;nbsp;дополнительной информацией по&amp;nbsp;связыванию моделей на&amp;nbsp;лету, &lt;br />
смотрите 'Создание и&amp;nbsp;уничтожение ассоциаций на&amp;nbsp;лету.'&lt;br />
Удаление или&amp;nbsp;добавление ассоциаций с&amp;nbsp;использованием bind- и&amp;nbsp;unbindModel() работает только &lt;br />
для&amp;nbsp;следующей операции модели, пока второй параметр не&amp;nbsp;установлен в&amp;nbsp;false. &lt;br />
Если второй параметр установлен в&amp;nbsp;false, то&amp;nbsp;bind останется и&amp;nbsp;для других запросов.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">За&amp;nbsp;дополнительной информацией по&amp;nbsp;связыванию моделей на&amp;nbsp;лету, смотрите 'Создание и&amp;nbsp;уничтожение ассоциаций на&amp;nbsp;лету.'&lt;br />
Удаление или&amp;nbsp;добавление ассоциаций с&amp;nbsp;использованием bind- и&amp;nbsp;unbindModel() работает только для&amp;nbsp;следующей операции модели, пока второй параметр не&amp;nbsp;установлен в&amp;nbsp;false. Если второй параметр установлен в&amp;nbsp;false, то&amp;nbsp;bind останется и&amp;nbsp;для других запросов.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2009-02-28 20:47:53</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Models/Associations/show?time=2009-02-28+20%3A47%3A53</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Models&amp;nbsp;/&amp;nbsp;Associations&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-28+20%3A47%3A53">2009-02-28 20:47:53&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-28+21%3A07%3A36">2009-02-28 21:07:36&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
Имя&amp;nbsp;таблицы,&amp;nbsp;по&amp;nbsp;соглашению,&amp;nbsp;в&amp;nbsp;алфавитном&amp;nbsp;порядке.&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
&lt;ul>&lt;li> &lt;strong>with&lt;/strong>: Определяет имя&amp;nbsp;модели для&amp;nbsp;соединяющей таблицы. По&amp;nbsp;умолчанию &lt;!--notypo-->CakePHP&lt;!--/notypo--> автоматически создаст модель. Для&amp;nbsp;примера, приведенного выше, это&amp;nbsp;будет &lt;!--notypo-->RecipesTag&lt;!--/notypo-->. Используя этот индекс, вы&amp;nbsp;можете изменить это&amp;nbsp;имя, данное по&amp;nbsp;умолчанию. Модель соединяющей таблицы может быть использована также, как&amp;nbsp;любая стандартная модель, для&amp;nbsp;прямого доступа к&amp;nbsp;соединяющей таблице.&lt;/li>&lt;/ul>
$this-&amp;gt;Recipe-&amp;gt;bindModel(array('hasOne' =&amp;gt; array('&lt;!--notypo-->RecipesTag&lt;!--/notypo-->')));&lt;br />
&lt;div class="indent">&lt;div class="indent">'conditions'=&amp;gt;array('&lt;!--notypo-->RecipesTag.tag_id&lt;!--/notypo-->'=&amp;gt;124) // id&amp;nbsp;тега &amp;laquo;десерт&amp;raquo;&lt;br />
'&lt;!--notypo-->RecipesTag&lt;!--/notypo-->',&lt;br />
&lt;div class="indent">'conditions' =&amp;gt; array('&lt;span class="missingpage">Filter&amp;nbsp;Tag.id&lt;/span>&lt;a href="http://cake-php.ru/wiki/FilterTag/id/edit?add=1" title="Создать эту страницу">?&lt;/a> = &lt;!--notypo-->RecipesTag.id&lt;!--/notypo-->')&lt;/div>&lt;/div>&lt;/div>
Теперь, в&amp;nbsp;контроллере &lt;!--notypo-->LeadersController&lt;!--/notypo-->, мы&amp;nbsp;можем использовать метод find() в&amp;nbsp;модели Leader, для&amp;nbsp;получения лидера и&amp;nbsp;всех ассоциированных к&amp;nbsp;нему последователей. Как&amp;nbsp;вы&amp;nbsp;могли видеть выше &amp;ndash; ассоциативный массив в&amp;nbsp;модели Leader определяет связь  &amp;#147;Leader hasMany Followers&amp;#148;. В&amp;nbsp;качестве демонстрации, давайте используем unbindModel() для&amp;nbsp;удаления ассоциации в&amp;nbsp;действии контроллера. &lt;br />
Теперь, когда мы&amp;nbsp;успешно удалили ассоциацию на&amp;nbsp;лету, давайте добавим её. Наши, пока что, безпринципные лидеры нуждаются в&amp;nbsp;ассоциированных принципах. Файл модели Principle &amp;ndash; пустой, за&amp;nbsp;исключением выражения var $name. Давайте привяжем нашим лидерам некоторые принципы на&amp;nbsp;лету (но помните, что&amp;nbsp;только для&amp;nbsp;следующей find операции). Эта&amp;nbsp;функция появляется в&amp;nbsp;&lt;!--notypo-->LeadersController&lt;!--/notypo-->: &lt;br />
Основное использование bindModel() &amp;ndash; включение нормального ассоциативного массива в&amp;nbsp;массив, чей&amp;nbsp;индекс называется после типа ассоциации, которую вы&amp;nbsp;хотите создать: &lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">// нормальные ассоциативные индексы идут здесь...&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
Несмотря на&amp;nbsp;то, что&amp;nbsp;вновь привязанная модель, не&amp;nbsp;нуждается в&amp;nbsp;определении ассоциации в&amp;nbsp;своем файле модели, необходимо корректно задать индексы, для&amp;nbsp;правильной работы ассоциации.&lt;br />
&lt;span class="missingpage">&amp;lt;&amp;lt; Удаление данных&lt;/span>&lt;a href="http://cake-php.ru/wiki/deleting/edit?add=1" title="Создать эту страницу">?&lt;/a> | &lt;span class="missingpage">Колбэки &amp;gt;&amp;gt;&lt;/span>&lt;a href="http://cake-php.ru/wiki/callbacks/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Имя&amp;nbsp;таблицы, по&amp;nbsp;соглашению, в&amp;nbsp;алфавитном порядке.&lt;br />
&lt;ul>&lt;li> &lt;strong>with&lt;/strong>: Определяет имя&amp;nbsp;модели для&amp;nbsp;соединяющей таблицы. По&amp;nbsp;умолчанию &lt;!--notypo-->CakePHP&lt;!--/notypo--> автоматически создаст модель. Для&amp;nbsp;примера, приведенного выше, это&amp;nbsp;будет &lt;span class="missingpage">Recipes&amp;nbsp;Tag&lt;/span>&lt;a href="http://cake-php.ru/wiki/RecipesTag/edit?add=1" title="Создать эту страницу">?&lt;/a>. Используя этот индекс, вы&amp;nbsp;можете изменить это&amp;nbsp;имя, данное по&amp;nbsp;умолчанию. Модель соединяющей таблицы может быть использована также, как&amp;nbsp;любая стандартная модель, для&amp;nbsp;прямого доступа к&amp;nbsp;соединяющей таблице.&lt;/li>&lt;/ul>
$this-&amp;gt;Recipe-&amp;gt;bindModel(array('hasOne' =&amp;gt; array('RecipesTag')));&lt;br />
&lt;div class="indent">&lt;div class="indent">'conditions'=&amp;gt;array('&lt;span class="missingpage">Recipes&amp;nbsp;Tag.tag_id&lt;/span>&lt;a href="http://cake-php.ru/wiki/RecipesTag/tagid/edit?add=1" title="Создать эту страницу">?&lt;/a>'=&amp;gt;124) // id&amp;nbsp;тега &amp;laquo;десерт&amp;raquo;&lt;br />
'RecipesTag',&lt;br />
&lt;div class="indent">'conditions' =&amp;gt; array('&lt;span class="missingpage">Filter&amp;nbsp;Tag.id&lt;/span>&lt;a href="http://cake-php.ru/wiki/FilterTag/id/edit?add=1" title="Создать эту страницу">?&lt;/a> = &lt;span class="missingpage">Recipes&amp;nbsp;Tag.id&lt;/span>&lt;a href="http://cake-php.ru/wiki/RecipesTag/id/edit?add=1" title="Создать эту страницу">?&lt;/a>')&lt;/div>&lt;/div>&lt;/div>
Теперь, в&amp;nbsp;контроллере &lt;span class="missingpage">Leaders&amp;nbsp;Controller&lt;/span>&lt;a href="http://cake-php.ru/wiki/LeadersController/edit?add=1" title="Создать эту страницу">?&lt;/a>, мы&amp;nbsp;можем использовать метод find() в&amp;nbsp;модели Leader, для&amp;nbsp;получения лидера и&amp;nbsp;всех ассоциированных к&amp;nbsp;нему последователей. Как&amp;nbsp;вы&amp;nbsp;могли видеть выше &amp;ndash; ассоциативный массив в&amp;nbsp;модели Leader определяет связь  &amp;#147;Leader hasMany Followers&amp;#148;. В&amp;nbsp;качестве демонстрации, давайте используем unbindModel() для&amp;nbsp;удаления ассоциации в&amp;nbsp;действии контроллера. &lt;br />
Теперь, когда мы&amp;nbsp;успешно удалили ассоциацию на&amp;nbsp;лету, давайте добавим её. Наши, пока что, безпринципные лидеры нуждаются в&amp;nbsp;ассоциированных принципах. Файл модели Principle &amp;ndash; пустой, за&amp;nbsp;исключением выражения var $name. Давайте привяжем нашим лидерам некоторые принципы на&amp;nbsp;лету (но помните, что&amp;nbsp;только для&amp;nbsp;следующей find операции). Эта&amp;nbsp;функция появляется в&amp;nbsp;&lt;span class="missingpage">Leaders&amp;nbsp;Controller&lt;/span>&lt;a href="http://cake-php.ru/wiki/LeadersController/edit?add=1" title="Создать эту страницу">?&lt;/a>: &lt;br />
The&amp;nbsp;basic usage for&amp;nbsp;bindModel() is&amp;nbsp;the encapsulation of&amp;nbsp;a normal association array inside an&amp;nbsp;array whose key&amp;nbsp;is&amp;nbsp;named after the&amp;nbsp;type of&amp;nbsp;association you&amp;nbsp;are trying to&amp;nbsp;create: &lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">// normal association keys go&amp;nbsp;here...&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2009-02-28 19:50:43</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Models/Associations/show?time=2009-02-28+19%3A50%3A43</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Models&amp;nbsp;/&amp;nbsp;Associations&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-28+19%3A50%3A43">2009-02-28 19:50:43&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-28+20%3A47%3A53">2009-02-28 20:47:53&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Такие же&amp;nbsp;трюки связывания могут быть использованы для&amp;nbsp;нумерации ваших HABTM моделей. Единственное предупреждение: нумерация требует два&amp;nbsp;запроса (один для&amp;nbsp;подсчета количества записей, а&amp;nbsp;другой &amp;ndash; для&amp;nbsp;получения данных). Передавайте параметр false в&amp;nbsp;bindModel(); который скажет &lt;!--notypo-->CakePHP&lt;!--/notypo--> сохранять связь для&amp;nbsp;множества запросов, а&amp;nbsp;не для&amp;nbsp;одного (по умолчанию). Обращайтесь к&amp;nbsp;API за&amp;nbsp;дополнительной информацией.&lt;br />
За&amp;nbsp;дополнительной информацией по&amp;nbsp;связыванию моделей на&amp;nbsp;лету, смотрите 'Создание и&amp;nbsp;уничтожение ассоциаций на&amp;nbsp;лету.'&lt;a name="h816-1">&lt;/a>&lt;h3>Создание и&amp;nbsp;уничтожение ассоциаций на&amp;nbsp;лету&lt;/h3>
Иногда необходимо создать и&amp;nbsp;уничтожить ассоциацию моделей на&amp;nbsp;лету. Это&amp;nbsp;может понадобиться по&amp;nbsp;различным причинам:&lt;br />
&lt;ul>&lt;li> Вы&amp;nbsp;хотите уменьшить количество выбираемых ассоциированных данных, но&amp;nbsp;все ваши ассоциации &amp;ndash; на&amp;nbsp;первом уровне рекурсии.
&lt;/li>&lt;li> Вы&amp;nbsp;хотите изменить определение ассоциации, для&amp;nbsp;сортировки или&amp;nbsp;фильтрации данных.&lt;/li>&lt;/ul>
Создание и&amp;nbsp;удаление этих ассоциаций производится с&amp;nbsp;помощью методов bindModel() и&amp;nbsp;unbindModel(). (Также есть очень полезное поведение &amp;#147;Containable&amp;#148;, смотрите раздел руководства о&amp;nbsp;встроенных поведениях, для&amp;nbsp;дополнительной информации.). Давайте создадим несколько моделей, чтобы мы&amp;nbsp;могли увидеть как&amp;nbsp;работают bindModel() и&amp;nbsp;unbindModel(). Мы&amp;nbsp;начнем с&amp;nbsp;двух моделей: &lt;br />
class Leader extends &lt;span class="missingpage">App&amp;nbsp;Model&lt;/span>&lt;a href="http://cake-php.ru/wiki/AppModel/edit?add=1" title="Создать эту страницу">?&lt;/a> {&lt;br />
&lt;div class="indent">&lt;div class="indent">var $name = 'Leader';&lt;br />
&lt;div class="indent">&lt;div class="indent">'Follower' =&amp;gt; array(&lt;br />
&lt;div class="indent">&lt;div class="indent">'className' =&amp;gt; 'Follower',&lt;br />
'order'     =&amp;gt; '&lt;span class="missingpage">Follower.rank&lt;/span>&lt;a href="http://cake-php.ru/wiki/Follower/rank/edit?add=1" title="Создать эту страницу">?&lt;/a>'&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
class Follower extends &lt;span class="missingpage">App&amp;nbsp;Model&lt;/span>&lt;a href="http://cake-php.ru/wiki/AppModel/edit?add=1" title="Создать эту страницу">?&lt;/a> {&lt;br />
&lt;div class="indent">&lt;div class="indent">var $name = 'Follower';&lt;/div>&lt;/div>
Теперь, в&amp;nbsp;контроллере &lt;span class="missingpage">Leaders&amp;nbsp;Controller&lt;/span>&lt;a href="http://cake-php.ru/wiki/LeadersController/edit?add=1" title="Создать эту страницу">?&lt;/a>, мы&amp;nbsp;можем использовать метод find() в&amp;nbsp;модели Leader, для&amp;nbsp;получения лидера и&amp;nbsp;всех ассоциированных к&amp;nbsp;нему последователей. Как&amp;nbsp;вы&amp;nbsp;могли видеть выше &amp;ndash; ассоциативный массив в&amp;nbsp;модели Leader определяет связь  &amp;#147;Leader hasMany Followers&amp;#148;. В&amp;nbsp;качестве демонстрации, давайте используем unbindModel() для&amp;nbsp;удаления ассоциации в&amp;nbsp;действии контроллера. &lt;br />
function someAction() {&lt;br />
&lt;div class="indent">&lt;div class="indent">// Это&amp;nbsp;выбирает лидера и&amp;nbsp;его ассоциированных последователей&lt;br />
$this-&amp;gt;Leader-&amp;gt;findAll();&lt;br />
&lt;/div>&lt;br />
&lt;div class="indent">// Давайте удалим hasMany...&lt;br />
$this-&amp;gt;Leader-&amp;gt;unbindModel(&lt;br />
&lt;div class="indent">&lt;div class="indent">array('hasMany' =&amp;gt; array('Follower'))&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;br />
&lt;div class="indent">// Теперь функция find вернет&lt;br />
// Лидеров, без&amp;nbsp;последователей&lt;br />
$this-&amp;gt;Leader-&amp;gt;findAll();&lt;br />
&lt;/div>&lt;br />
&lt;div class="indent">// Внимание: unbindModel влияет только на&amp;nbsp;следующую &lt;br />
// функцию find. Дополнительный вызов find call будет &lt;br />
// использовать заданную информацию об&amp;nbsp;ассоциации.&lt;br />
&lt;/div>&lt;br />
&lt;div class="indent">// Мы&amp;nbsp;уже использовали findAll() после unbindModel(), &lt;br />
// так&amp;nbsp;что, этот вызов снова вернет лидеров с&amp;nbsp;&lt;br />
// последователями...&lt;br />
$this-&amp;gt;Leader-&amp;gt;findAll();&lt;/div>&lt;/div>
Удаление или&amp;nbsp;добавление ассоциаций с&amp;nbsp;использованием bind- и&amp;nbsp;unbindModel() работает только для&amp;nbsp;следующей операции модели, пока второй параметр не&amp;nbsp;установлен в&amp;nbsp;false. Если второй параметр установлен в&amp;nbsp;false, то&amp;nbsp;bind останется и&amp;nbsp;для других запросов.&lt;br />
Здесь базовый пример использования unbindModel(): &lt;br />
$this-&amp;gt;Model-&amp;gt;unbindModel(&lt;br />
&lt;div class="indent">&lt;div class="indent">array('associationType' =&amp;gt; array('associatedModelClassName'))&lt;/div>&lt;/div>
);&lt;br />
Теперь, когда мы&amp;nbsp;успешно удалили ассоциацию на&amp;nbsp;лету, давайте добавим её. Наши, пока что, безпринципные лидеры нуждаются в&amp;nbsp;ассоциированных принципах. Файл модели Principle &amp;ndash; пустой, за&amp;nbsp;исключением выражения var $name. Давайте привяжем нашим лидерам некоторые принципы на&amp;nbsp;лету (но помните, что&amp;nbsp;только для&amp;nbsp;следующей find операции). Эта&amp;nbsp;функция появляется в&amp;nbsp;&lt;span class="missingpage">Leaders&amp;nbsp;Controller&lt;/span>&lt;a href="http://cake-php.ru/wiki/LeadersController/edit?add=1" title="Создать эту страницу">?&lt;/a>: &lt;br />
function anotherAction() {&lt;br />
&lt;div class="indent">&lt;div class="indent">// в&amp;nbsp;файле leader.php нет&amp;nbsp;Leader hasMany Principles &lt;br />
// таким образом, find выберет только лидеров&lt;br />
$this-&amp;gt;Leader-&amp;gt;findAll();&lt;br />
// Используем bindModel() для&amp;nbsp;добавления новой&lt;br />
// ассоциации в&amp;nbsp;модель Leader:&lt;br />
$this-&amp;gt;Leader-&amp;gt;bindModel(&lt;br />
&lt;div class="indent">&lt;div class="indent">array('hasMany' =&amp;gt; array(&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">'Principle' =&amp;gt; array(&lt;br />
&lt;div class="indent">&lt;div class="indent">'className' =&amp;gt; 'Principle'&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>// Теперь мы&amp;nbsp;можем использовать одну find функцию для&lt;br />
// получения лидеров и&amp;nbsp;их принципов:&lt;br />
$this-&amp;gt;Leader-&amp;gt;findAll();&lt;/div>&lt;/div>
The&amp;nbsp;basic usage for&amp;nbsp;bindModel() is&amp;nbsp;the encapsulation of&amp;nbsp;a normal association array inside an&amp;nbsp;array whose key&amp;nbsp;is&amp;nbsp;named after the&amp;nbsp;type of&amp;nbsp;association you&amp;nbsp;are trying to&amp;nbsp;create: &lt;br />
$this-&amp;gt;Model-&amp;gt;bindModel(&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">array('associationName' =&amp;gt; array(&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">'associatedModelClassName' =&amp;gt; array(&lt;br />
&lt;div class="indent">&lt;div class="indent">// normal association keys go&amp;nbsp;here...&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2009-02-28 18:58:35</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Models/Associations/show?time=2009-02-28+18%3A58%3A35</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Models&amp;nbsp;/&amp;nbsp;Associations&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-28+18%3A58%3A35">2009-02-28 18:58:35&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-28+19%3A50%3A43">2009-02-28 19:50:43&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Помните, что&amp;nbsp;надо определить HABTM ассоциацию в&amp;nbsp;модели Tag, если вы&amp;nbsp;пожелаете выбирать данные модели Recipe из&amp;nbsp;модели Tag.&lt;br />
Также возможно выполнять пользовательские find запросы, на&amp;nbsp;основе HABTM отношений. Рассмотрим следующий пример:&lt;br />
Возьмем ту&amp;nbsp;же структуру, как&amp;nbsp;в&amp;nbsp;примере выше (Recipe HABTM Tag). Допустим, мы&amp;nbsp;хотим выбрать все&amp;nbsp;рецепты с&amp;nbsp;тегом 'десерт'. Один из&amp;nbsp;вариантов (неверный) &amp;ndash; применить условие непосредственно в&amp;nbsp;определении ассоциации:&lt;br />
&amp;lt;?&lt;br />
$this-&amp;gt;Recipe-&amp;gt;bindModel(array(&lt;br />
&lt;div class="indent">'hasAndBelongsToMany' =&amp;gt; array(&lt;br />
&lt;div class="indent">'Tag' =&amp;gt; array('conditions'=&amp;gt;array('&lt;span class="missingpage">Tag.name&lt;/span>&lt;a href="http://cake-php.ru/wiki/Tag/name/edit?add=1" title="Создать эту страницу">?&lt;/a>'=&amp;gt;'десерт'))&lt;/div>&lt;/div>
)));&lt;br />
$this-&amp;gt;Recipe-&amp;gt;find('all');&lt;br />
//полученные данные&lt;br />
&lt;div class="indent">&lt;div class="indent">0 =&amp;gt; Array&lt;br />
&lt;div class="indent">&lt;div class="indent">{&lt;br />
[Recipe] =&amp;gt; Array&lt;br />
&lt;div class="indent">&lt;div class="indent">(&lt;br />
&lt;div class="indent">&lt;div class="indent">[id] =&amp;gt; 2745&lt;br />
[name] =&amp;gt; Шоколад сахарные бомбы&lt;br />
[created] =&amp;gt; &lt;span class="nobr">2007&amp;ndash;05&amp;ndash;01&lt;/span> 10:31:01&lt;br />
[user_id] =&amp;gt; 2346&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>[Tag] =&amp;gt; Array&lt;br />
&lt;div class="indent">&lt;div class="indent">(&lt;br />
&lt;div class="indent"> [0] =&amp;gt; Array&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(&lt;br />
&lt;div class="indent">&lt;div class="indent">[id] =&amp;gt; 124&lt;br />
[name] =&amp;gt; десерт&lt;br />
&lt;/div>&lt;/div>)&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>)&lt;br />
1 =&amp;gt; Array&lt;br />
&lt;div class="indent">&lt;div class="indent">{&lt;br />
[Recipe] =&amp;gt; Array&lt;br />
&lt;div class="indent">&lt;div class="indent">(&lt;br />
&lt;div class="indent">&lt;div class="indent">[id] =&amp;gt; 2745&lt;br />
[name] =&amp;gt; крабовые пирожные&lt;br />
[created] =&amp;gt; &lt;span class="nobr">2008&amp;ndash;05&amp;ndash;01&lt;/span> 10:31:01&lt;br />
[user_id] =&amp;gt; 2349&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>[Tag] =&amp;gt; Array&lt;br />
&lt;div class="indent">&lt;div class="indent">(&lt;br />
}&lt;br />
&lt;/div>&lt;/div>}&lt;/div>&lt;/div>&lt;/div>&lt;/div>
Обратите внимание, что&amp;nbsp;в&amp;nbsp;данном случае были возвращены все&amp;nbsp;рецепты, но&amp;nbsp;только теги &amp;laquo;десерт&amp;raquo;. Есть несколько способов достижения нашей цели. Первый &amp;ndash; это&amp;nbsp;искать в&amp;nbsp;модели Tag&amp;nbsp;(вместо модели Recipe), это&amp;nbsp;также даст нам&amp;nbsp;все ассоциированные рецепты.&lt;br />
&amp;lt;?&lt;br />
$this-&amp;gt;Recipe-&amp;gt;Tag-&amp;gt;find('all', array('conditions'=&amp;gt;array('&lt;span class="missingpage">Tag.name&lt;/span>&lt;a href="http://cake-php.ru/wiki/Tag/name/edit?add=1" title="Создать эту страницу">?&lt;/a>'=&amp;gt;'десерт')));&lt;br />
Мы&amp;nbsp;также можем использовать модель соединяющей таблицы (которую &lt;!--notypo-->CakePHP&lt;!--/notypo--> предоставляет нам), для&amp;nbsp;поиска по&amp;nbsp;данному ID. &lt;br />
&amp;lt;?&lt;br />
$this-&amp;gt;Recipe-&amp;gt;bindModel(array('hasOne' =&amp;gt; array('RecipesTag')));&lt;br />
$this-&amp;gt;Recipe-&amp;gt;find('all', array(&lt;br />
&lt;div class="indent">&lt;div class="indent">'fields' =&amp;gt; array('Recipe.*'),&lt;br />
'conditions'=&amp;gt;array('&lt;span class="missingpage">Recipes&amp;nbsp;Tag.tag_id&lt;/span>&lt;a href="http://cake-php.ru/wiki/RecipesTag/tagid/edit?add=1" title="Создать эту страницу">?&lt;/a>'=&amp;gt;124) // id&amp;nbsp;тега &amp;laquo;десерт&amp;raquo;&lt;/div>&lt;/div>
));&lt;br />
Также можно создать экзотическую ассоциацию для&amp;nbsp;создания множества необходимых связей, для&amp;nbsp;фильтрации, например:&lt;br />
&amp;lt;?&lt;br />
$this-&amp;gt;Recipe-&amp;gt;bindModel(array(&lt;br />
&lt;div class="indent">'hasOne' =&amp;gt; array(&lt;br />
&lt;div class="indent">'RecipesTag',&lt;br />
'FilterTag' =&amp;gt; array(&lt;br />
&lt;div class="indent">'className' =&amp;gt; 'Tag',&lt;br />
'foreignKey' =&amp;gt; false,&lt;br />
'conditions' =&amp;gt; array('&lt;span class="missingpage">Filter&amp;nbsp;Tag.id&lt;/span>&lt;a href="http://cake-php.ru/wiki/FilterTag/id/edit?add=1" title="Создать эту страницу">?&lt;/a> = &lt;span class="missingpage">Recipes&amp;nbsp;Tag.id&lt;/span>&lt;a href="http://cake-php.ru/wiki/RecipesTag/id/edit?add=1" title="Создать эту страницу">?&lt;/a>')&lt;/div>&lt;/div>&lt;/div>
))));&lt;br />
$this-&amp;gt;Recipe-&amp;gt;find('all', array(&lt;br />
&lt;div class="indent">&lt;div class="indent">'fields' =&amp;gt; array('Recipe.*'),&lt;br />
'conditions'=&amp;gt;array('&lt;span class="missingpage">Filter&amp;nbsp;Tag.name&lt;/span>&lt;a href="http://cake-php.ru/wiki/FilterTag/name/edit?add=1" title="Создать эту страницу">?&lt;/a>'=&amp;gt;'десерт')&lt;/div>&lt;/div>
));&lt;br />
//полученные данные&lt;br />
&lt;div class="indent">&lt;div class="indent">0 =&amp;gt; Array&lt;br />
&lt;div class="indent">&lt;div class="indent">{&lt;br />
[Recipe] =&amp;gt; Array&lt;br />
&lt;div class="indent">&lt;div class="indent">(&lt;br />
&lt;div class="indent">&lt;div class="indent">[id] =&amp;gt; 2745&lt;br />
[name] =&amp;gt; Chocolate Frosted Sugar Bombs&lt;br />
[created] =&amp;gt; &lt;span class="nobr">2007&amp;ndash;05&amp;ndash;01&lt;/span> 10:31:01&lt;br />
[user_id] =&amp;gt; 2346&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2009-02-28 14:04:26</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Models/Associations/show?time=2009-02-28+14%3A04%3A26</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Models&amp;nbsp;/&amp;nbsp;Associations&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-28+14%3A04%3A26">2009-02-28 14:04:26&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-28+18%3A58%3A35">2009-02-28 18:58:35&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Возможные индексы для&amp;nbsp;массивов HABTM ассоциаций:&lt;br />
&lt;ul>&lt;li> &lt;strong>className&lt;/strong>: имя&amp;nbsp;класса модели, ассоциированной к&amp;nbsp;текущей модели. Если вы&amp;nbsp;определяете отношение 'Recipe HABTM Tag', то&amp;nbsp;индекс className должен быть равен 'Tag'.
&lt;/li>&lt;li> &lt;strong>joinTable&lt;/strong>: Имя&amp;nbsp;соединяющей таблицы, используемой в&amp;nbsp;данной ассоциации (если таблица названа без&amp;nbsp;соблюдения соглашений для&amp;nbsp;HABTM соединяющих таблиц).
&lt;/li>&lt;li> &lt;strong>with&lt;/strong>: Определяет имя&amp;nbsp;модели для&amp;nbsp;соединяющей таблицы. По&amp;nbsp;умолчанию &lt;!--notypo-->CakePHP&lt;!--/notypo--> автоматически создаст модель. Для&amp;nbsp;примера, приведенного выше, это&amp;nbsp;будет &lt;span class="missingpage">Recipes&amp;nbsp;Tag&lt;/span>&lt;a href="http://cake-php.ru/wiki/RecipesTag/edit?add=1" title="Создать эту страницу">?&lt;/a>. Используя этот индекс, вы&amp;nbsp;можете изменить это&amp;nbsp;имя, данное по&amp;nbsp;умолчанию. Модель соединяющей таблицы может быть использована также, как&amp;nbsp;любая стандартная модель, для&amp;nbsp;прямого доступа к&amp;nbsp;соединяющей таблице.
&lt;/li>&lt;li> &lt;strong>foreignKey&lt;/strong>: имя&amp;nbsp;внешнего ключа, расположенного в&amp;nbsp;текущей модели. Это&amp;nbsp;особенно удобно если вам&amp;nbsp;необходимо определить множество HABTM отношений. Значение по&amp;nbsp;умолчанию &amp;ndash; это&amp;nbsp;единственное число имени текущей модели, затем символ подчеркивания и&amp;nbsp;суффикс id.
&lt;/li>&lt;li> &lt;strong>associationForeignKey&lt;/strong>: имя&amp;nbsp;внешнего ключа, расположенного в&amp;nbsp;другой модели. Это&amp;nbsp;особенно удобно если вам&amp;nbsp;необходимо определить множество HABTM отношений. Значение по&amp;nbsp;умолчанию &amp;ndash; это&amp;nbsp;единственное число имени другой модели, затем символ подчеркивания и&amp;nbsp;суффикс id.
&lt;/li>&lt;li> &lt;strong>unique&lt;/strong>: Если true (значение по&amp;nbsp;умолчанию), то&amp;nbsp;кейк сначала удалит существующие записи в&amp;nbsp;таблице внешнего ключа, перед вставкой новых, когда обновляете запись. Т.о. существующие ассоциации должны быть переданы снова во&amp;nbsp;время обновления.
&lt;/li>&lt;li> &lt;strong>conditions&lt;/strong>: SQL&amp;nbsp;код, используемый для&amp;nbsp;фильтрации, связанных записей. Это&amp;nbsp;хорошая практика &amp;ndash; использовать имена моделей в&amp;nbsp;SQL коде: '&lt;!--notypo-->Comment.status&lt;!--/notypo--> = 1' лучше, чем&amp;nbsp;просто &amp;laquo;status = 1.&amp;raquo;
&lt;/li>&lt;li> &lt;strong>fields&lt;/strong>: Список полей, которые должны быть получены, когда выбираются данные ассоциируемых моделей. По&amp;nbsp;умолчанию возвращаются все&amp;nbsp;поля.
&lt;/li>&lt;li> &lt;strong>order&lt;/strong>: SQL&amp;nbsp;код, который определяет порядок сортировки для&amp;nbsp;возвращаемых записей.
&lt;/li>&lt;li> &lt;strong>limit&lt;/strong>: Максимальное число ассоциированных записей, которые вы&amp;nbsp;хотите получить.
&lt;/li>&lt;li> &lt;strong>offset&lt;/strong>: Количество пропускаемых ассоциированных записей (для данных условий и&amp;nbsp;сортировки), перед выбором и&amp;nbsp;ассоциированием.
&lt;/li>&lt;li> &lt;strong>finderQuery, deleteQuery, insertQuery&lt;/strong>: Полные SQL&amp;nbsp;запросы &lt;!--notypo-->CakePHP&lt;!--/notypo--> для&amp;nbsp;выборки, удаления или&amp;nbsp;создания новых записей. Это&amp;nbsp;может быть использовано в&amp;nbsp;ситуациях, которые требуют специальных результатов. &lt;/li>&lt;/ul>
После того, как&amp;nbsp;эта ассоциация определена, find операции модели Recipe будут также выбирать записи связанной модели Tag, если такие существуют:&lt;br />
//Пример результатов после вызова $this-&amp;gt;Recipe-&amp;gt;find().&lt;br />
&lt;div class="indent">&lt;div class="indent">[Recipe] =&amp;gt; Array&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">[id] =&amp;gt; 2745&lt;br />
[name] =&amp;gt; Chocolate Frosted Sugar Bombs&lt;br />
[user_id] =&amp;gt; 2346&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>[Tag] =&amp;gt; Array&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">[name] =&amp;gt; Breakfast&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div> [1] =&amp;gt; Array&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">[id] =&amp;gt; 124&lt;br />
[name] =&amp;gt; Dessert&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div> [2] =&amp;gt; Array&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">[id] =&amp;gt; 125&lt;br />
[name] =&amp;gt; Heart Disease&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2009-02-27 12:51:06</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Models/Associations/show?time=2009-02-27+12%3A51%3A06</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Models&amp;nbsp;/&amp;nbsp;Associations&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-27+12%3A51%3A06">2009-02-27 12:51:06&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-28+14%3A04%3A26">2009-02-28 14:04:26&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">HABTM требует отдельную связывающую таблицу, которая содержит имена обоих моделей.&lt;br />
||Recipe HABTM Tag&amp;nbsp;|id, recipes_tags.recipe_id, recipes_tags.tag_id ||&lt;br />
||Cake HABTM Fan&amp;nbsp;|id, cakes_fans.cake_id, cakes_fans.fan_id ||&lt;br />
||Foo HABTM Bar&amp;nbsp;|id, bars_foos.foo_id, bars_foos.bar_id||&lt;br />
Имя&amp;nbsp;таблицы, по&amp;nbsp;соглашению, в&amp;nbsp;алфавитном порядке.&lt;br />
После того, как&amp;nbsp;эта новая таблица создана, мы&amp;nbsp;можем определить HABTM ассоциацию в&amp;nbsp;файлах моделей. В&amp;nbsp;этот раз&amp;nbsp;мы&amp;nbsp;пропустим строковый синтаксис и&amp;nbsp;перейдем сразу к&amp;nbsp;определению ассоциации с&amp;nbsp;помощью массива:&lt;br />
class Recipe extends &lt;span class="missingpage">App&amp;nbsp;Model&lt;/span>&lt;a href="http://cake-php.ru/wiki/AppModel/edit?add=1" title="Создать эту страницу">?&lt;/a> {&lt;br />
&lt;div class="indent">&lt;div class="indent">var $name = 'Recipe';   &lt;br />
var $hasAndBelongsToMany = array(&lt;br />
&lt;div class="indent">&lt;div class="indent">'Tag' =&amp;gt;&lt;br />
&lt;div class="indent">&lt;div class="indent">array(&lt;br />
&lt;div class="indent">&lt;div class="indent"> 'className'              =&amp;gt; 'Tag',&lt;br />
 'joinTable'              =&amp;gt; 'recipes_tags',&lt;br />
 'with'                   =&amp;gt; &lt;span class="cite">,&lt;br />
'foreignKey'             =&amp;gt; 'recipe_id',&lt;br />
'associationForeignKey'  =&amp;gt; 'tag_id',&lt;br />
'unique'                 =&amp;gt; true,&lt;br />
'conditions'             =&amp;gt; &lt;/span>,&lt;br />
'fields'                 =&amp;gt; &lt;span class="cite">,&lt;br />
'order'                  =&amp;gt; &lt;/span>,&lt;br />
'limit'                  =&amp;gt; &lt;span class="cite">,&lt;br />
'offset'                 =&amp;gt; &lt;/span>,&lt;br />
'finderQuery'            =&amp;gt; &lt;span class="cite">,&lt;br />
'deleteQuery'            =&amp;gt; &lt;/span>,&lt;br />
'insertQuery'            =&amp;gt; ''&lt;br />
&lt;/div>&lt;/div>)&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2009-02-25 13:18:46</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Models/Associations/show?time=2009-02-25+13%3A18%3A46</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Models&amp;nbsp;/&amp;nbsp;Associations&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-25+13%3A18%3A46">2009-02-25 13:18:46&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-27+12%3A51%3A06">2009-02-27 12:51:06&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Давайте рассмотрим последний тип&amp;nbsp;отношений: hasAndBelongsToMany, или&amp;nbsp;HABTM. Эта&amp;nbsp;ассоциация используется, когда у&amp;nbsp;вас есть две&amp;nbsp;модели, которые должны быть связаны многократно, множеством различных способов.&lt;br />
Главное отличие между hasMany и&amp;nbsp;HABTM &amp;ndash; это&amp;nbsp;то, что&amp;nbsp;связь между моделями не&amp;nbsp;исключающая. Например, мы&amp;nbsp;соединяем нашу модель Recipe с&amp;nbsp;моделью Tag, используя HABTM. Прикрепление тега &amp;laquo;украинский&amp;raquo; к&amp;nbsp;бабушкиному рецепту борща, не&amp;nbsp;&amp;laquo;израсходует&amp;raquo; этот тег. При&amp;nbsp;необходимости, я&amp;nbsp;могу прикрепить этот тег&amp;nbsp;и&amp;nbsp;к другим рецептам.&lt;br />
Связи между объектами, ассоциированными через hasMany, &amp;ndash; исключающие. Если User hasMany Comments, то&amp;nbsp;комментарии принадлежит только определенному пользователю и&amp;nbsp;не может быть привязан к&amp;nbsp;другому. &lt;br />
Идем дальше. Нам&amp;nbsp;необходимо создать дополнительную таблицу в&amp;nbsp;базе данных, для&amp;nbsp;управления HABTM ассоциацией. Имя&amp;nbsp;этой новой соединяющей таблицы должно состоять из&amp;nbsp;имен двух используемых моделей (в алфавитном порядке), разделенных символом подчеркивания  ( _ ). Таблица должна содержать два&amp;nbsp;поля, внешние ключи (типа integer), указывающие на&amp;nbsp;первичные ключи, используемых моделей. Чтобы избежать конфликтных ситуаций &amp;ndash; не&amp;nbsp;определяйте комбинированные первичные ключи для&amp;nbsp;этих двух полей. Если это, все&amp;nbsp;же, необходимо, то&amp;nbsp;вы можете определить уникальный индекс. Если вы&amp;nbsp;планируете добавить другую дополнительную информацию в&amp;nbsp;эту таблицу, то&amp;nbsp;добавьте поле с&amp;nbsp;первичным ключом (по соглашению 'id'), чтобы вы&amp;nbsp;могли работать с&amp;nbsp;этой таблицей также легко, как&amp;nbsp;с&amp;nbsp;другими моделями.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2009-02-25 13:04:40</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Models/Associations/show?time=2009-02-25+13%3A04%3A40</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Models&amp;nbsp;/&amp;nbsp;Associations&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-25+13%3A04%3A40">2009-02-25 13:04:40&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-25+13%3A18%3A46">2009-02-25 13:18:46&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Второй параметр метода Model-&amp;gt;delete() должен быть установлен в&amp;nbsp;true &lt;br />
для&amp;nbsp;включения рекурсивного удаления.&lt;br />
Когда данная ассоциация определена, то&amp;nbsp;find операции в&amp;nbsp;модели User будут также выбирать записи связанной модели Comment, если таковые имеются:&lt;br />
//Образец результата после вызова $this-&amp;gt;User-&amp;gt;find().&lt;br />
(  &lt;br />
&lt;div class="indent">&lt;div class="indent">[Comment] =&amp;gt; Array&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">[0] =&amp;gt; Array&lt;br />
&lt;div class="indent">&lt;div class="indent">(&lt;br />
&lt;div class="indent">&lt;div class="indent">[id] =&amp;gt; 123&lt;br />
[user_id] =&amp;gt; 121&lt;br />
[title] =&amp;gt; On&amp;nbsp;Gwoo the&amp;nbsp;Kungwoo&lt;br />
[body] =&amp;gt; The&amp;nbsp;Kungwooness is&amp;nbsp;not so&amp;nbsp;Gwooish&lt;br />
[created] =&amp;gt; &lt;span class="nobr">2006&amp;ndash;05&amp;ndash;01&lt;/span> 10:31:01&lt;br />
&lt;/div>&lt;/div>)&lt;br />
&lt;/div>&lt;/div>[1] =&amp;gt; Array&lt;br />
&lt;div class="indent">&lt;div class="indent">(&lt;br />
&lt;div class="indent">&lt;div class="indent">[id] =&amp;gt; 123&lt;br />
[user_id] =&amp;gt; 121&lt;br />
[title] =&amp;gt; More on&amp;nbsp;Gwoo&lt;br />
[body] =&amp;gt; But&amp;nbsp;what of&amp;nbsp;the ‘Nut?&lt;br />
[created] =&amp;gt; &lt;span class="nobr">2006&amp;ndash;05&amp;ndash;01&lt;/span> 10:41:01&lt;br />
&lt;/div>&lt;/div>)&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
Помните, что&amp;nbsp;вам надо определить ассоциацию 'Comment belongsTo User' для&amp;nbsp;того, чтобы получать данные в&amp;nbsp;обоих направлениях. &lt;a name="h816-1">&lt;/a>&lt;h3>hasAndBelongsToMany (HABTM)&lt;/h3>
На&amp;nbsp;данный момент вы&amp;nbsp;можете называть себя профессионалом ассоциирования моделей в&amp;nbsp;&lt;!--notypo-->CakePHP&lt;!--/notypo-->. Вы&amp;nbsp;уже хорошо разбираетесь в&amp;nbsp;трех видах ассоциаций, который охватывают основную массу отношений объектов.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Второй параметр метода Model-&amp;gt;delete() должен быть установлен в&amp;nbsp;true для&amp;nbsp;включения рекурсивного удаления.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2009-02-25 12:34:59</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Models/Associations/show?time=2009-02-25+12%3A34%3A59</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Models&amp;nbsp;/&amp;nbsp;Associations&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-25+12%3A34%3A59">2009-02-25 12:34:59&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Associations?time=2009-02-25+13%3A04%3A40">2009-02-25 13:04:40&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">||User hasMany Comment |&lt;!--notypo-->Comment.user_id&lt;!--/notypo--> ||&lt;br />
||Cake hasMany Virtue | &lt;!--notypo-->Virtue.cake_id&lt;!--/notypo--> ||&lt;br />
||Product hasMany Option | &lt;!--notypo-->Option.product_id&lt;!--/notypo-->||&lt;br />
Возможные индексы для&amp;nbsp;массивов hasMany ассоциации: &lt;br />
&lt;ul>&lt;li> &lt;strong>className&lt;/strong>: имя&amp;nbsp;класса модели, ассоциируемой к&amp;nbsp;данной. Если вы&amp;nbsp;устанавливаете связь &amp;#147;User hasMany Comment&amp;#148;, то&amp;nbsp;индексу className следует присвоить 'Comment'.
&lt;/li>&lt;li> &lt;strong>foreignKey&lt;/strong>: имя&amp;nbsp;внешнего ключа, расположенного в&amp;nbsp;другой модели. Индекс особенно удобен, если вам&amp;nbsp;необходимо определить множество ассоциаций hasMany. Значение по&amp;nbsp;умолчанию &amp;ndash; это&amp;nbsp;единственное число имени текущей модели, затем символ подчеркивания и&amp;nbsp;суффикс id.
&lt;/li>&lt;li> &lt;strong>conditions&lt;/strong>: SQL&amp;nbsp;код, используемый для&amp;nbsp;фильтрации записей ассоциированной модели. Хороший тон&amp;nbsp;&amp;ndash; использовать имена моделей в&amp;nbsp;SQL коде: ' &lt;!--notypo-->Comment.status&lt;!--/notypo--> = 1' всегда лучше, чем&amp;nbsp;просто 'status = 1'.
&lt;/li>&lt;li>  &lt;strong>order&lt;/strong>: SQL&amp;nbsp;код, который определяет порядок сортировки для&amp;nbsp;возвращаемых записей.
&lt;/li>&lt;li>  &lt;strong>limit&lt;/strong>: Максимальное число ассоциированных записей, которые вы&amp;nbsp;хотите получить.
&lt;/li>&lt;li>  &lt;strong>offset&lt;/strong>: Количество пропускаемых ассоциированных записей (для данных условий и&amp;nbsp;сортировки), перед выбором и&amp;nbsp;ассоциированием.
&lt;/li>&lt;li>  &lt;strong>dependent&lt;/strong>: Когда dependent установлен в&amp;nbsp;true, то&amp;nbsp;возможно рекурсивное удаление. Для&amp;nbsp;данного примера, записи модели Comment будут удалены, когда связанная с&amp;nbsp;ними запись пользователя будет удалена.&lt;/li>&lt;/ul>
Второй параметр метода Model-&amp;gt;delete() должен быть установлен в&amp;nbsp;true для&amp;nbsp;включения рекурсивного удаления.&lt;br />
&lt;ul>&lt;li>  &lt;strong>exclusive&lt;/strong>: Когда exclusive установлен в&amp;nbsp;true, то&amp;nbsp;рекурсивное удаление доступно при&amp;nbsp;вызове deleteAll(), вместо удаления каждого объекта по&amp;nbsp;отдельности. Это&amp;nbsp;существенно улучшает производительность, но&amp;nbsp;не идеально подходит во&amp;nbsp;всех случаях.
&lt;/li>&lt;li>  &lt;strong>finderQuery&lt;/strong>: Полный SQL&amp;nbsp;запрос, который &lt;!--notypo-->CakePHP&lt;!--/notypo--> может использовать для&amp;nbsp;получения ассоциированных данных. Это&amp;nbsp;может быть использовано в&amp;nbsp;ситуациях, которые требуют специальных результатов. &lt;/li>&lt;/ul>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">||User hasMany Comment |Comment.user_id ||&lt;br />
||Cake hasMany Virtue | Virtue.cake_id ||&lt;br />
||Product hasMany Option | Option.product_id||&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>

