2010-02-18 6 views
2

Je suis nouveau sur CakePHP, et je continue à comprendre les bases. En ce moment, je suis un peu mystifié par le processus pour obtenir un ou plusieurs champs d'un modèle (à partir d'un autre modèle lié).Quel est le moyen le plus efficace d'obtenir des données d'un modèle dans CakePHP?

Jusqu'à présent, j'ai ceci:

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

qui semble terriblement bavard.

Et ceci:

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

Ce qui semble moins longue, mais les résultats dans deux requêtes.

Ce que je utilisé à faire dans ces situations, pré-gâteau:

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

ou quand je me sentais comme taper:

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

Ainsi, la question: suis-je manque un peu de magie dans CakePHP par lequel accomplir cette tâche, ou dois-je vivre avec taper beaucoup?

+1

La magie qui vous manque est Ruby. Je ne veux pas être un troll, c'est juste que Cake est une tentative pour obtenir la magie de Ruby en PHP sans se rendre compte que PHP n'est tout simplement pas à la hauteur. –

+1

Pourquoi attribuer une valeur dans un tableau à une seule variable? C'est assez inefficace. Vous n'avez pas besoin d'utiliser $ field1; faites juste un Model :: find() et utilisez la valeur retournée efficacement. –

Répondre

2
$arrayOfFiels = array('field1', 'field2'); 
$this->User->id = 123; 
$userFields = $this->User->read($arrayOfFields); 

Ou quelque chose comme:

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

Dans les deux cas, Userfields $ sera un tableau avec User #123 données. Dans la seconde, en raison du premier argument défini comme null, tous les champs seront récupérés. Le second argument (optionnel) définit un identifiant, qui peut également être prédéfini plus tôt, comme dans le premier exemple.

4

Vous ne croirez jamais, mais il y a une façon courte :-)

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

vous pouvez utiliser « lire » ou « trouver » ou « requête » pour obtenir des données à partir du modèle

lecture

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

trouver

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

requête

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