2012-04-02 5 views
0

Gerade jetzt, wenn ich versuche, mehr als zwei Objekte tief in phpactivecord zu laden, erhalte ich einen Fehler.Triple-Level-Assoziationen in phpactivecord

Ist etwas wie folgt aus:

$conditions['include'] = array('playlists' => array('playlist_songs' =>array('song'))); 
User::find('first', $conditions); 

nur eine Ebene zu viel, um zu versuchen abzurufen? Ich erhalte einen Fehler Undefined offset: 0 immer wenn ich versuche, eine Verbindung 3 Ebenen tief zu verwenden. Danke für jede Hilfe oder Einsicht: D.

Edit:

Also habe ich ein Muster gefunden, die ein wenig seltsam ist. Wenn ich array('playlist_songs'=>array('song'=>array('album'))); habe, wird die eifrige Last für mich brechen. Aber wenn ich dem Array eine weitere Verknüpfung hinzufüge, funktioniert es dann korrekt. array('playlist_songs'=>array('song','song','song','song'=>array('album')));

Ich habe 'Lied' mehrmals in diesem Array verwendet, nur um den Fix sehr offensichtlich zu machen.

Antwort

1

Genau dies für mich festgelegt durch die Linie 247 von Table.php in execute_eager_load von

Wechsel
if (is_array($name)) 
{ 
      $nested_includes = count($name) > 1 ? $name : $name[0];//<-- this line 
      $name = $index; 
} 

zu

if (is_array($name)) 
{ 
      $nested_includes = count($name) > 0 ? $name : $name[0]; 
      $name = $index; 
} 
+0

Dies ist halb herausziehend lebensrettend! Ich werde es irgendwann heute oder morgen testen. – Anther

+0

Das sollte Haare sagen *. Rückblickend sieht dieser Kommentar sehr unpassend aus ... – Anther

+0

Schön zu sehen, dass Sie das in den Repo geschafft haben. Anther danke für die Folge! –

0

Dies sollte funktionieren. Ein Beispiel habe ich gerade getestet diesen meinen eigenen Code:

$model = MyItem::find('first',array('include' => array('Group' => array('SomeGroupFeature')))); 

Das einzige, was ich denken kann, ist, dass Sie keine Ergebnisse in einer der Dinge zu tun, oder Ihre Bedingungen enthält etwas anderes aus einer früheren Verwendung des Arrays?

+0

Für Ihr Beispiel genau die Frage entsprechen, enthält das Array aussehen müßte so: 'array ('include' => array ('Gruppe' => array ('SomeGroupFeature' => array ('third_thing'))));) – Anther

+0

Ich werde noch ein paar Tests machen und schauen, ob es hat tatsächlich mit leeren Ergebnissen zu tun, da ich Situationen finde, in denen es tatsächlich wie erwartet funktioniert ... – Anther