2012-03-30 7 views
3

Wie man den Kuchen php finden Abfrage Ergebnis Array-Schlüssel auf ID-Wert mit Kuchen php geändert?Machen Sie den Kuchen php Abfrage Ergebnis zu ändern Array-Schlüssel mit ID-Wert mit Cake php selbst

$videos = $this->Video->find('all'); 

print_r($videos); 

wird das Array

seine
Array 
(
    [0] => Array 
     (
      [Video] => Array 
       (
        [id] => 6 
       ) 

     ) 

    [1] => Array 
     (
      [Video] => Array 
       (
        [id] => 8 
       ) 

     ) 
) 

Wie wie unten

Array 
(
    [6] => Array 
     (
      [Video] => Array 
       (
        [id] => 6 
       ) 

     ) 

    [8] => Array 
     (
      [Video] => Array 
       (
        [id] => 8 
       ) 

     ) 
) 

Ist es möglich, durch Kuchen PHP selbst den Array-Schlüssel mit dem ID-Wert zu ändern?

Antwort

1

Nein, ist es nicht. Sie können das Ergebnis in afterFind() ändern, siehe book.cakephp.org, aber ich würde die Daten einfach so verwenden, wie sie sind. Ich sehe keinen Grund, diesen zusätzlichen Aufwand und die Komplexität hinzuzufügen, weil die ID sowieso verfügbar ist.

8

Wenn Sie wirklich die Daten in diesem Format benötigen, können Sie entweder afterFind verwenden, um die IDs festzulegen, oder Sie können CakePHPs Hash/Set Klasse verwenden.

starten (seit CakePHP 2,2)

$videos = $this->Video->find('all'); 
$videos = Hash::combine($videos, '{n}.Video.id', '{n}'); 
debug($videos); 

Oder dies für CakePHP älter als 2,2

$videos = $this->Video->find('all'); 
$videos = Set::combine($videos, '{n}.Video.id', '{n}'); 
debug($videos); 

Weitere Details finden http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html

Wenn Sie könnten uns sagen, warum Sie das brauchen Da Daten in diesem Format vorliegen, können wir Ihnen auch bessere Wege vorschlagen, da die Daten auf diese Weise nicht geändert werden müssen.

1

In 2.2 CakePHP könnten Sie

$videos = $this->Video->find('list'); 
pr($videos); 

verwenden Dies würde jeden Wert mit der ID als Schlüssel drucken.

Ich weiß nicht, ob Sie das in 1.3 verwenden können, aber Sie können versuchen ...