Home PageКаталог Изменения НовыеКомментарии Пользователи Регистрация
CakePHP: Manual/Developing/Models/Retrieving ...
Это старая версия Manual/Developing/Models/Retrieving за 2009-02-15 21:54:56..

Получение данных

find

find($type, $params)

Параметру $type можно присваивать что-либо из 'all', 'first', 'count', 'list', 'neighbors' or 'threaded'. 'first' – значение по умалчанию.


$params – это массив с любыми, ниже представленными опциями, в качестве индекса:


<?php
array(
    
'conditions' => array('Model.field' => $thisValue), //массив условий
    
'recursive' => 1//int
    
'fields' => array('Model.field1','Model.field2'), //массив имен полей
    
'order' => array('Model.created','Model.field3 DESC'),//строка или массив, определяющие порядок
    
'group' => array('Model.field'), //поля для GROUP BY
    
'limit' => n//int
    
'page' => n//int
    
'callbacks' => true //другие возможные значения: false, 'before', 'after'
)
?>


Если вы используете find('list'), индекс 'fields' в $params определяет индекс, значение и группу


<?php
// сгенерированный список будет проиндексирован по Post.id, со значением Post.title
$this->Post->find('list', array('fields'=>'Post.title'));
 
//сгенерированный список будет проиндексирован по Post.slug, со значением Post.title
$this->Post->find('list', array('fields'=>array('Post.slug''Post.title')));
 
// сгенерированный список будет сгруппирован по Post.author_id, и каждая группа
// проиндексирована по Post.id, со значением Post.title
$this->Post->find('list', array('fields'=>array('Post.id''Post.title''Post.author_id')));

?>


Если вы хотите использовать метку optgroup из родительской таблицы, установите в параметрах 'recursive'=>1.


Если вы используете find('neighbors'), то индекс 'field' в $params определяет поле для анализа, и индекс 'value' в массиве $params определяет значение по которому определяется следующий и предыдущий. Обратите внимание, что индексы 'field' и 'value' не используются для find('all') – это специальные символы для find('neighbors').


<?php
// допустим у нас есть id от 1 до 10, мы увидим prev, установленное в 1 и next, установленное в 3
$this->Post->id 2;
$one $this->Post->find('neighbors');
// Для получения соседних данных, используя другое поле..
$two $this->Post->find('neighbors', array('field'=>'Post.title''value'=>$data['Post']['title']));
// Обратите внимание, что если используете индекс 'fields' для поиска, 
//то должен быть определен 'field', иначе это не сработает
$three $this->Post->find('neighbors', array('field'=>'Post.title''value'=>$data['Post']['title'], 'fields'=>array('id''title'));
?>


Для обратной совместимости, find также принимает предыдущий синтаксис:


find(string $conditions, array $fields, string $order, int $recursive)

Если вам необходимо использовать SQL операторы такие, как в (MySQL) DISTINCT, MAX, MIN, и др., то вы можете определить их как часть индекса 'fields', например так:


$this->Product->find('all', array('fields'=>'DISTINCT (Product.name) AS product_name'));


Если вы пытаетесь найти уникальную комбинацию полей (например, сгенерируйте sql, подобный, приведенному ниже)

SELECT DISTINCT Client, Job, Description
FROM JOB
WHERE Active=1
GROUP BY Client, Job, Description
ORDER BY Client


Делайте следующее...


<?php
$condition 
= array(
            
'conditions' => array('Model.Active =' => 1),
            
'fields' => array('DISTINCT Model.Client''Model.Job''Model.Description'),
            
'order' => array('Model.Client'),
            
'group' => array('Model.Client''Model.Job''Model.Description'));

$this->Model->find('all'$condition);
?>



findAll


findAll(string $conditions, array $fields, string $order, int $limit, int $page, int $recursive)


findAll оставлено для совместимости, используйте find('all').


 
Комментарии
Жаль, про функцию read() не перевели.
87.103.214.113 (2010-01-21 06:08:24)
Не то слово, про неё вообще забыли упомянуть. Хоть бы на английском описание добавили.
95.72.164.78 (2010-03-08 02:17:26)
Хотелось бы еще добавить что если выполняешь find() в методе модели по текущей модели то дабы не подтягивались ассоциированные модели надо делать так:
$this->recursive = 0;
ибо параметр recursive самого find() не пашет.
fidzina.TeNeT.Odessa.UA (2010-05-21 15:31:15)
Добавить комментарий:

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