Какой самый эффективный способ получить данные из модели в CakePHP? - PullRequest
2 голосов
/ 19 февраля 2010

Я новичок в CakePHP, и все еще выясняю основы. Сейчас я немного озадачен процессом получения одного или нескольких полей из модели (из другой связанной модели).

Пока у меня есть это:

$this->user->id = 123;
$this->User->read();
$field1 = $this->User->data['User']['field1'];
$field2 = $this->User->data['User']['field2'];

Что кажется ужасно многословным.

А это:

$this->user->id = 123;
$field1 = $this->User->field('field1');
$field1 = $this->User->field('field2');

Который кажется менее длинным, но приводит к двум запросам.

Что я использовал , чтобы сделать в этих ситуациях, pre-Cake:

$this->User = new User(123);
$field1 = $this->User->field1;
$field2 = $this->User->field2;

или когда мне захотелось набрать:

this->User = new User(123);
$field1 = $this->User->getFieldOne();
$field2 = $this->User->getFieldTwo();

Итак, вопрос: мне не хватает какой-то магии в CakePHP, с помощью которой можно выполнить эту задачу, или мне приходится много печатать?

Ответы [ 3 ]

4 голосов
/ 19 февраля 2010

Вы никогда не поверите, но есть короткий путь: -)

$this->User->find('all', array('fields'=>array('field1', 'field2')));
2 голосов
/ 19 февраля 2010
$arrayOfFiels = array('field1', 'field2');
$this->User->id = 123;
$userFields = $this->User->read($arrayOfFields);

Или что-то вроде:

$userFields = $this->User->read(null, 123);

В обоих случаях $ userFields будет массивом с данными User #123.Во втором из-за первого аргумента, установленного как null, будут выбраны все поля.Второй аргумент (необязательный) устанавливает идентификатор, который также может быть предварительно установлен ранее, как в первом примере.

0 голосов
/ 21 февраля 2010

вы можете использовать 'read' или 'find' или 'query' для получения данных из модели

прочитать

$fields = array('field1','field2');
$this->data = $this->User->read( $fields,$someid );

найти

$this->data = $this->User->find('all',array('fields'=>array('field1','field2') );

запрос

$this->data = $this->User->query("select field1,field2 from user where id=$someid;");
...