CakePHP - Manual/Developing/Models/Retrieving /wiki/Manual/Developing/Models/Retrieving History/revisions of CakePHP/Manual/Developing/Models/Retrieving en-us 2009-02-17 23:07:27 /wiki/Manual/Developing/Models/Retrieving/show?time=2009-02-17+23%3A07%3A27 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a name=".manual.developing.models.retrieving" href="/wiki/Manual/Developing/Models/Retrieving" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Models&nbsp;/&nbsp;Retrieving</a> за <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-17+23%3A07%3A27">2009-02-17 23:07:27</a> и <a href="/wiki/Manual/Developing/Models/Retrieving">2009-02-17 23:11:07</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">Внимание: <span class="missingpage">Cake&nbsp;PHP</span><a href="/wiki/CakePHP/edit?add=1" title="Создать эту страницу">?</a> будет брать в&nbsp;кавычки численные значения, в&nbsp;зависимости от&nbsp;типа поля в&nbsp;БД.</div><br /> <b>Удалено:</b><br /> <div class="deletions">Внимание: <!--notypo-->CakePHP<!--/notypo--> будет брать в&nbsp;кавычки численные значения, в&nbsp;зависимости от&nbsp;типа поля в&nbsp;БД.</div></div> 2009-02-17 23:05:52 /wiki/Manual/Developing/Models/Retrieving/show?time=2009-02-17+23%3A05%3A52 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a href="/wiki/Manual/Developing/Models/Retrieving" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Models&nbsp;/&nbsp;Retrieving</a> за <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-17+23%3A05%3A52">2009-02-17 23:05:52</a> и <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-17+23%3A07%3A27">2009-02-17 23:07:27</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions"><!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?&nbsp;<br /></span><span style="color: #007700">array(</span><span style="color: #DD0000">'fields'</span><span style="color: #007700">=&gt;array(</span><span style="color: #DD0000">'Product.type'</span><span style="color: #007700">,</span><span style="color: #DD0000">'MIN(Product.price)&nbsp;as&nbsp;price'</span><span style="color: #007700">),&nbsp;</span><span style="color: #DD0000">'group'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'Product.type'</span><span style="color: #007700">);&nbsp;<br /></span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo-->(php) <br /> &lt;? <br /> array('fields'=&gt;array('DISTINCT (<span class="missingpage">User.name</span><a href="/wiki/User/name/edit?add=1" title="Создать эту страницу">?</a>) AS&nbsp;my_column_name'), 'order'=&gt;array('<span class="missingpage">User.id</span><a href="/wiki/User/id/edit?add=1" title="Создать эту страницу">?</a> DESC'));<br /> ?&gt;</div><br /> <b>Удалено:</b><br /> <div class="deletions"><!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?&nbsp;</span><span style="color: #007700">array(</span><span style="color: #DD0000">'fields'</span><span style="color: #007700">=&gt;array(</span><span style="color: #DD0000">'Product.type'</span><span style="color: #007700">,</span><span style="color: #DD0000">'MIN(Product.price)&nbsp;as&nbsp;price'</span><span style="color: #007700">),&nbsp;</span><span style="color: #DD0000">'group'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'Product.type'</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?&nbsp;</span><span style="color: #007700">array(</span><span style="color: #DD0000">'fields'</span><span style="color: #007700">=&gt;array(</span><span style="color: #DD0000">'DISTINCT&nbsp;(User.name)&nbsp;AS&nbsp;my_column_name'</span><span style="color: #007700">),&nbsp;</span><span style="color: #DD0000">'order'</span><span style="color: #007700">=&gt;array(</span><span style="color: #DD0000">'User.id&nbsp;DESC'</span><span style="color: #007700">));&nbsp;</span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--></div></div> 2009-02-17 22:47:41 /wiki/Manual/Developing/Models/Retrieving/show?time=2009-02-17+22%3A47%3A41 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a href="/wiki/Manual/Developing/Models/Retrieving" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Models&nbsp;/&nbsp;Retrieving</a> за <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-17+22%3A47%3A41">2009-02-17 22:47:41</a> и <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-17+23%3A05%3A52">2009-02-17 23:05:52</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">Параметру $type можно присваивать что-либо из&nbsp;'all', 'first', 'count', 'list', 'neighbors' or&nbsp;'threaded'. 'first' &ndash; значение по&nbsp;умолчанию.<br /> Кейк может также проверить поля на&nbsp;null. В&nbsp;этом примере запрос вернет записи, в&nbsp;которых заголовок поста не&nbsp;null:<br /> array (&laquo;not&raquo; =&gt; array (<br /> <div class="indent"><div class="indent"><div class="indent"><div class="indent">"<span class="missingpage">Post.title</span><a href="/wiki/Post/title/edit?add=1" title="Создать эту страницу">?</a>" =&gt; null,</div></div></div></div> Для&nbsp;выполнения BETWEEN запросов, вы&nbsp;должны использовать следующее:<br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?&nbsp;</span><span style="color: #007700">array(</span><span style="color: #DD0000">'Post.id&nbsp;BETWEEN&nbsp;?&nbsp;AND&nbsp;?'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(</span><span style="color: #0000BB">1</span><span style="color: #007700">,</span><span style="color: #0000BB">10</span><span style="color: #007700">))&nbsp;</span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> Внимание: <!--notypo-->CakePHP<!--/notypo--> будет брать в&nbsp;кавычки численные значения, в&nbsp;зависимости от&nbsp;типа поля в&nbsp;БД.<br /> А&nbsp;как же&nbsp;с GROUP BY?<br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?&nbsp;</span><span style="color: #007700">array(</span><span style="color: #DD0000">'fields'</span><span style="color: #007700">=&gt;array(</span><span style="color: #DD0000">'Product.type'</span><span style="color: #007700">,</span><span style="color: #DD0000">'MIN(Product.price)&nbsp;as&nbsp;price'</span><span style="color: #007700">),&nbsp;</span><span style="color: #DD0000">'group'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'Product.type'</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> Быстрый пример создания DISTINCT запроса. Вы&nbsp;можете использовать другие операторы, такие как&nbsp;MIN(), MAX(), и&nbsp;пр., в&nbsp;подобном виде:<br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?&nbsp;</span><span style="color: #007700">array(</span><span style="color: #DD0000">'fields'</span><span style="color: #007700">=&gt;array(</span><span style="color: #DD0000">'DISTINCT&nbsp;(User.name)&nbsp;AS&nbsp;my_column_name'</span><span style="color: #007700">),&nbsp;</span><span style="color: #DD0000">'order'</span><span style="color: #007700">=&gt;array(</span><span style="color: #DD0000">'User.id&nbsp;DESC'</span><span style="color: #007700">));&nbsp;</span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> Вы&nbsp;можете создавать очень сложные условия:<br /> <div class="indent"> 'OR' =&gt; array(<br /> <div class="indent"><div class="indent">array('<span class="missingpage">Company.name</span><a href="/wiki/Company/name/edit?add=1" title="Создать эту страницу">?</a>' =&gt; 'Future Holdings'),<br /> array('<span class="missingpage">Company.name</span><a href="/wiki/Company/name/edit?add=1" title="Создать эту страницу">?</a>' =&gt; 'Steel Mega Works')<br /> </div></div> ),<br /> 'AND' =&gt; array(<br /> <div class="indent"><div class="indent">array(<br /> <div class="indent"> 'OR'=&gt;array(<br /> <div class="indent"><div class="indent">array('<span class="missingpage">Company.status</span><a href="/wiki/Company/status/edit?add=1" title="Создать эту страницу">?</a>' =&gt; 'active'),<br /> 'NOT'=&gt;array(<br /> <div class="indent"> array('<span class="missingpage">Company.status</span><a href="/wiki/Company/status/edit?add=1" title="Создать эту страницу">?</a>'=&gt; array('inactive', 'suspended'))<br /> </div>)<br /> </div></div> )<br /> </div></div> )<br /> </div> )</div> Условие выше сгенерирует следующий SQL:<br /> %%(sql)<br /> SELECT `Company`.`id`, `Company`.`name`, <br /> `Company`.`description`, `Company`.`location`, <br /> `Company`.`created`, `Company`.`status`, `Company`.`size`<br /> FROM<br /> <div class="indent"> `companies` AS&nbsp;`Company`</div> WHERE<br /> <div class="indent"> ((`Company`.`name` = 'Future Holdings')<br /> OR<br /> (`Company`.`name` = 'Steel Mega Works'))</div> AND<br /> <div class="indent"> ((`Company`.`status` = 'active')<br /> OR&nbsp;(NOT (`Company`.`status` IN&nbsp;('inactive', 'suspended'))))</div> <span class="missingpage">&lt;&lt; Создание таблиц базы данных</span><a href="/wiki/Creating/edit?add=1" title="Создать эту страницу">?</a> | <span class="missingpage">Сохранение данных &gt;&gt;</span><a href="/wiki/Saving/edit?add=1" title="Создать эту страницу">?</a></div><br /> <b>Удалено:</b><br /> <div class="deletions">Параметру $type можно присваивать что-либо из&nbsp;'all', 'first', 'count', 'list', 'neighbors' or&nbsp;'threaded'. 'first' &ndash; значение по&nbsp;умалчанию.</div></div> 2009-02-17 21:57:29 /wiki/Manual/Developing/Models/Retrieving/show?time=2009-02-17+21%3A57%3A29 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a href="/wiki/Manual/Developing/Models/Retrieving" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Models&nbsp;/&nbsp;Retrieving</a> за <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-17+21%3A57%3A29">2009-02-17 21:57:29</a> и <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-17+22%3A47%3A41">2009-02-17 22:47:41</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions"><!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?&nbsp;</span><span style="color: #007700">array(</span><span style="color: #DD0000">"Post.title&nbsp;&lt;&gt;"&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">"This&nbsp;is&nbsp;a&nbsp;post"</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> Заметьте, что&nbsp;'&lt;&gt;' следует за&nbsp;именем поля. <!--notypo-->CakePHP<!--/notypo--> может разобрать любой допустимый SQL&nbsp;оператор сравнения, включая выражения, использующие LIKE, BETWEEN, или&nbsp;REGEX, только если вы&nbsp;поставите пробел между именем поля и&nbsp;оператором. Единственное исключение &ndash; это&nbsp;оператор IN&nbsp;(...). Например, вы&nbsp;хотете найти все&nbsp;посты с&nbsp;названиями из&nbsp;заданного множества:<br /> <div class="indent">"<span class="missingpage">Post.title</span><a href="/wiki/Post/title/edit?add=1" title="Создать эту страницу">?</a>" =&gt; array(&laquo;Первый пост&raquo;, &laquo;Второй пост&raquo;, &laquo;Третиий пост&raquo;)</div> Чтобы сделать NOT&nbsp;IN(...) аналог, для&nbsp;поиска постов с&nbsp;названиями, не&nbsp;входящими в&nbsp;данное множество:<br /> <div class="indent">&#147;NOT&#148; =&gt; array( "<span class="missingpage">Post.title</span><a href="/wiki/Post/title/edit?add=1" title="Создать эту страницу">?</a>" =&gt; array(&laquo;Первый пост&raquo;, &laquo;Второй пост&raquo;, &laquo;Третиий пост&raquo;) )</div> Добавить дополнительный фильтр в&nbsp;условие также просто, как&nbsp;добавить пару индекс/значение в&nbsp;массив:<br /> array (<br /> <div class="indent">"<span class="missingpage">Post.title</span><a href="/wiki/Post/title/edit?add=1" title="Создать эту страницу">?</a>" =&gt; array(&laquo;Первый пост&raquo;, &laquo;Второй пост&raquo;, &laquo;Третиий пост&raquo;),<br /> "<span class="missingpage">Post.created</span><a href="/wiki/Post/created/edit?add=1" title="Создать эту страницу">?</a> &gt;" =&gt; date('Y-m-d', strtotime(&laquo;-2 weeks&raquo;))</div> Вы&nbsp;также можете создавать поисковые запросы, которые сравнивают два&nbsp;поля в&nbsp;базе данных:<br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?&nbsp;</span><span style="color: #007700">array(</span><span style="color: #DD0000">"Post.created&nbsp;=&nbsp;Post.modified"</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> В&nbsp;примере выше, будут возвращены посты, у&nbsp;которых дата создания равна дате модификации (т.е. посты, которые никогда не&nbsp;редактировались).<br /> Помните, что&nbsp;если вы&nbsp;не можете сформировать WHERE условие, то&nbsp;можете определить его&nbsp;в&nbsp;виде строки, например:<br /> <div class="indent"><div class="indent">'<span class="missingpage">Model.field</span><a href="/wiki/Model/field/edit?add=1" title="Создать эту страницу">?</a> & 8 = 1',<br /> //другие условия как&nbsp;обычно</div></div> По&nbsp;умолчанияю <!--notypo-->CakePHP<!--/notypo--> соединяет множественные условия с&nbsp;помощью оператора AND; что&nbsp;для примера выше означает &ndash; будут выбраны посты, созданные в&nbsp;последние две&nbsp;недели и&nbsp;имеющие любое название из&nbsp;данного множества. Однако, мы&nbsp;можем также легко найти посты, которые соответствуют условию OR:<br /> array( &#147;or&#148; =&gt; array (<br /> <div class="indent">"<span class="missingpage">Post.title</span><a href="/wiki/Post/title/edit?add=1" title="Создать эту страницу">?</a>" =&gt; array(&laquo;Первый пост&raquo;, &laquo;Второй пост&raquo;, &laquo;Третиий пост&raquo;),<br /> "<span class="missingpage">Post.created</span><a href="/wiki/Post/created/edit?add=1" title="Создать эту страницу">?</a> &gt;" =&gt; date('Y-m-d', strtotime(&laquo;-2 weeks&raquo;))</div> Кейк принимает все&nbsp;действующие логические SQL-операторы, включая AND, OR, NOT, XOR, и&nbsp;др. Они&nbsp;могут быть набраны строчными или&nbsp;заглавными буквами. Эти&nbsp;условия также бесконечно &laquo;гнездящиеся&raquo;. Предположим, у&nbsp;вас есть belongsTo ассоциация между Posts и&nbsp;Authors. И&nbsp;вы хотите найти все&nbsp;посты, содержащие конкретное слово(&laquo;волшебный&raquo;) или, которые были созданы в&nbsp;последние две&nbsp;недели, но&nbsp;вы хотите ограничить ваш&nbsp;поиск только постами, написанными Василием:<br /> array (<br /> <div class="indent">"<span class="missingpage">Author.name</span><a href="/wiki/Author/name/edit?add=1" title="Создать эту страницу">?</a>" =&gt; &laquo;Василий&raquo;, <br /> &#147;or&#148; =&gt; array (<br /> <div class="indent">"<span class="missingpage">Post.title</span><a href="/wiki/Post/title/edit?add=1" title="Создать эту страницу">?</a> LIKE" =&gt; "%волшебный%",<br /> "<span class="missingpage">Post.created</span><a href="/wiki/Post/created/edit?add=1" title="Создать эту страницу">?</a> &gt;" =&gt; date('Y-m-d', strtotime(&laquo;-2 weeks&raquo;))<br /> </div>)</div></div></div> 2009-02-16 22:54:02 /wiki/Manual/Developing/Models/Retrieving/show?time=2009-02-16+22%3A54%3A02 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a href="/wiki/Manual/Developing/Models/Retrieving" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Models&nbsp;/&nbsp;Retrieving</a> за <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-16+22%3A54%3A02">2009-02-16 22:54:02</a> и <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-17+21%3A57%3A29">2009-02-17 21:57:29</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions"><a name="h813-1"></a><h3>Комплексные условия поиска</h3> Множество поисковых запросов модели требуют передачу условий тем&nbsp;или иным способом. Самый простой способ &ndash; это&nbsp;использовать SQL&nbsp;оператор WHERE. Если вам&nbsp;понадобится больше управления, то&nbsp;вы может использовать массивы. <br /> Использование массивов яснее и&nbsp;легче воспринимается, а&nbsp;также, делает очень простым создание запросов. В&nbsp;синтаксисе, также разделяются элементы вашего запроса (поля, значения, операторы, и&nbsp;др.) на&nbsp;отдельные управляемые части. Это&nbsp;позволяет <!--notypo-->CakePHP<!--/notypo--> генерировать наиболее эффективные запросы, обеспечивать правильный SQL&nbsp;синтаксис, и&nbsp;корректно завершать каждую часть запроса. <br /> Базовый запрос, основанный на&nbsp;массиве, выглядит так:<br /> $conditions = array("<span class="missingpage">Post.title</span><a href="/wiki/Post/title/edit?add=1" title="Создать эту страницу">?</a>" =&gt; &laquo;Это пост&raquo;);<br /> //Пример использования с&nbsp;моделью:<br /> $this-&gt;Post-&gt;find($conditions);<br /> Структура здесь говорит сама за&nbsp;себя: запрос найдет любой пост, название которого равно &laquo;Это пост&raquo;. Обратите внимание, что&nbsp;мы&nbsp;можем использовать только &#147;title&#148; в&nbsp;качестве имени поля, но&nbsp;указывать имя&nbsp;модели при&nbsp;создании запросов является хорошей практикой. Это&nbsp;делает код&nbsp;более понятным и&nbsp;помогает предотвратить конфликтные ситуации в&nbsp;будущем, если вы&nbsp;решите внести изменения в&nbsp;вашу схему данных.<br /> Что&nbsp;касается других подобных запросов, то&nbsp;они также просты. Допустим, мы&nbsp;хотим найти все&nbsp;посты, в&nbsp;которых название не&nbsp;равно &laquo;Это пост&raquo;:</div><br /> <b>Удалено:</b><br /> <div class="deletions"><a name="h813-1"></a><h3>Complex Find Conditions</h3></div></div> 2009-02-16 15:23:53 /wiki/Manual/Developing/Models/Retrieving/show?time=2009-02-16+15%3A23%3A53 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a href="/wiki/Manual/Developing/Models/Retrieving" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Models&nbsp;/&nbsp;Retrieving</a> за <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-16+15%3A23%3A53">2009-02-16 15:23:53</a> и <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-16+22%3A54%3A02">2009-02-16 22:54:02</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">Обычные SQL&nbsp;запросы могут быть сделаны с&nbsp;помощью метода модели query().</div><br /> <b>Удалено:</b><br /> <div class="deletions">Обычные SQL&nbsp;вызовы могут быть сделаны с&nbsp;помощью метода модели query().</div></div> 2009-02-16 14:20:51 /wiki/Manual/Developing/Models/Retrieving/show?time=2009-02-16+14%3A20%3A51 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a href="/wiki/Manual/Developing/Models/Retrieving" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Models&nbsp;/&nbsp;Retrieving</a> за <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-16+14%3A20%3A51">2009-02-16 14:20:51</a> и <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-16+15%3A23%3A53">2009-02-16 15:23:53</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions"><div class="indent"> <strong>findCount(string $conditions, int $recursive)</strong></div> <span class="cite">Этот метод оставлен для&nbsp;совместимости, используйте find('count').</span><br /> Возвращает количество записей, удовлетворяющих заданному условию. Используйте параметр $recursive, для&nbsp;того, чтобы <!--notypo-->CakePHP<!--/notypo--> выбирал больше (или меньше) уровней ассоциированных моделей.<a name="h813-1"></a><h3>field</h3> <div class="indent"> <strong>field(string $name, array $conditions = null, string $order = null)</strong></div> Возвращает значение отдельно взятого поля, определенного как $name, из&nbsp;первой записи результата выборки, удовлетворяющей условию $conditions и&nbsp;отсортированной согласно $order. Если никаких условий не&nbsp;указано, но&nbsp;определен id, то&nbsp;функция вернет значение поля $name для&nbsp;данного id. Если нет&nbsp;подходящей записи, то&nbsp;функция вернет false.<br /> $model-&gt;id = 22;<br /> echo $model-&gt;field('name'); // выводит значение поля name для&nbsp;id=22<br /> // выводит значение поля name записи, созданной последней.<br /> echo $model-&gt;field('name', array('created &lt;' =&gt; date('Y-m-d H:i:s')), 'created DESC'); <a name="h813-2"></a><h3>Complex Find Conditions</h3></div></div> 2009-02-16 13:39:30 /wiki/Manual/Developing/Models/Retrieving/show?time=2009-02-16+13%3A39%3A30 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a href="/wiki/Manual/Developing/Models/Retrieving" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Models&nbsp;/&nbsp;Retrieving</a> за <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-16+13%3A39%3A30">2009-02-16 13:39:30</a> и <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-16+14%3A20%3A51">2009-02-16 14:20:51</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions"><a name="h813-1"></a><h3>generateList</h3> <div class="indent"> <strong>generateList(string $conditions, string $order, int $limit, string $keyPath, string $valuePath)</strong></div> <span class="cite">generateList устарела и&nbsp;заменена использованием find('list'), или&nbsp;find('all'), совмещенная с&nbsp;вызовом Set::combine()</span>.<br /> Эта&nbsp;функция используется для&nbsp;быстрого получения списка пар&nbsp;ключ/значение &ndash; особенно удобно для&nbsp;создания HTML тэга select из&nbsp;списка ваших моделей. Используйт параметры $conditions, $order, и $limit так&nbsp;же, как&nbsp;бы&nbsp;вы их&nbsp;использовали для&nbsp;findAll() запроса.<br /> Если $primaryKey и $displayField определены в&nbsp;модели, то&nbsp;нет необходимости передавать два&nbsp;последних параметра, т.к. они&nbsp;действуют, как $keyPath и $keyValue, соответственно. Также, если ни $keyPath ни $displayField не&nbsp;передаются, то&nbsp;<!--notypo-->CakePHP<!--/notypo--> попытается загрузить информацию, используя 'title' или&nbsp;'name'.<br /> Параметры $keyPath и $valuePath определяют где&nbsp;искать ключи и&nbsp;значения для&nbsp;сгенерированного списка. Для&nbsp;примера, если вы&nbsp;хотите сгенерировать список на&nbsp;основе вашей модели Role, с&nbsp;ключом integer id, полный вызов должен выглядеть, например, так.:<br /> $this-&gt;Role-&gt;generateList(<br /> <div class="indent"><div class="indent">null, <br /> 'role_name ASC', <br /> null, <br /> '{n}.<span class="missingpage">Role.id</span><a href="/wiki/Role/id/edit?add=1" title="Создать эту страницу">?</a>', <br /> '{n}.<span class="missingpage">Role.role_name</span><a href="/wiki/Role/rolename/edit?add=1" title="Создать эту страницу">?</a>'</div></div> //Это вернет, нечто наподобие:<br /> <div class="indent"><div class="indent">'1' =&gt; 'Head Honcho',<br /> '2' =&gt; 'Marketing',<br /> '3' =&gt; 'Department Head',<br /> '4' =&gt; 'Grunt'</div></div> Многих людей немного смущает синтаксис '{n}', используемый generateList(). Не&nbsp;беспокойтесь, это&nbsp;символ-заполнитель для&nbsp;переключения между источниками данных модели. Об&nbsp;этом будет написано далее.<a name="h813-2"></a><h3>findCount</h3></div><br /> <b>Удалено:</b><br /> <div class="deletions">generateList(string $conditions, string $order, int $limit, string $keyPath, string $valuePath)</div></div> 2009-02-16 12:58:26 /wiki/Manual/Developing/Models/Retrieving/show?time=2009-02-16+12%3A58%3A26 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a href="/wiki/Manual/Developing/Models/Retrieving" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Models&nbsp;/&nbsp;Retrieving</a> за <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-16+12%3A58%3A26">2009-02-16 12:58:26</a> и <a href="/wiki/Manual/Developing/Models/Retrieving?time=2009-02-16+13%3A39%3A30">2009-02-16 13:39:30</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">Для&nbsp;того, чтобы ваш&nbsp;запрос не&nbsp;кэшировался, присваивайте второму параметру значение false. Пример: query($query, $cachequeries = false).<br /> query() использует имя&nbsp;таблицы в&nbsp;запросе, как&nbsp;индекс массива для&nbsp;возвращаемых данных, а&nbsp;не имя&nbsp;модели. Например,<br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?&nbsp;$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">Picture</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT&nbsp;*&nbsp;FROM&nbsp;pictures&nbsp;LIMIT&nbsp;2;"</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> может вернуть<br /> <div class="indent"><div class="indent"><div class="indent"><div class="indent"><div class="indent"><div class="indent">[pictures] =&gt; Array<br /> <div class="indent"><div class="indent"><div class="indent"><div class="indent">[id] =&gt; 1304<br /> [user_id] =&gt; 759<br /> </div></div></div></div>[pictures] =&gt; Array<br /> <div class="indent"><div class="indent"><div class="indent"><div class="indent">[id] =&gt; 1305<br /> [user_id] =&gt; 759</div></div></div></div></div></div></div></div></div></div> Для&nbsp;использования имя&nbsp;модели, в&nbsp;виде индекса массива, и&nbsp;получения соответствующего результата, запрос должен быть переписан: <br /> %%(php)&lt;? $this-&gt;Picture-&gt;query(&laquo;SELECT * FROM pictures AS&nbsp;Picture LIMIT 2;"); ?&gt;<br /> Результат:<br /> <div class="indent"><div class="indent"><div class="indent"><div class="indent"><div class="indent"><div class="indent">[Picture] =&gt; Array<br /> <div class="indent"><div class="indent"><div class="indent"><div class="indent">[id] =&gt; 1304<br /> [user_id] =&gt; 759<br /> </div></div></div></div>[Picture] =&gt; Array<br /> <div class="indent"><div class="indent"><div class="indent"><div class="indent">[id] =&gt; 1305<br /> [user_id] =&gt; 759</div></div></div></div></div></div></div></div></div></div> generateList(string $conditions, string $order, int $limit, string $keyPath, string $valuePath)</div></div>