2017-03-24 3 views
0

Ich habe Modell User und UserPhoto genannt, die in einem Benutzer zu viele user photoWie wählen Sie Spalten in Phalcon Modell mit Beziehung verwenden

$this->hasMany("id", "UserPhoto", "user_id"); 
$this->belongsTo("user_id", "User", "id"); 
verwandt ist

Wenn ich

$userData = User::find(); 

foreach ($userData as $user) { 
    $userPhotoAry = $user->UserPhoto; 
} 

versuche ich bin relational resultset bekommen, aber ich brauche nur eine ausgewählte Spalte aus der Tabelle.

Also das habe ich versucht,

$userData = User::find(array("columns"=>"id,username")); 

foreach ($userData as $user) { 
    $userPhotoAry = $user->UserPhoto; 
} 

I $UserPhoto bin immer ist nicht definiert.

Gibt es eine Möglichkeit, Spalte in Suche Abfrage mit Beziehung zu erwähnen?

+1

Wie @nikolay sagte, ist es nicht möglich, die entsprechenden Datensätze zu erhalten, wenn Sie Spalten in Ihrer Abfrage angeben. Weil Ihnen eine 'Phalcon \ Mvc \ Model \ Row' anstelle einer Modellinstanz zurückgegeben wird. Könnte ich hinzufügen, dass die Angabe von Spalten ist eigentlich _slower_ als nur die Abfrage des gesamten Datensatzes – Timothy

Antwort

0

Mit dem Standardverhalten können Sie nicht. Hier ist der Grund:

// Specifying columns 
$userData = User::find(array("columns"=>"id,username")); 
var_dump(get_class($userData[0])); // "Phalcon\Mvc\Model\Row" 

// Selecting whole objects 
$userData = User::find(); 
var_dump(get_class($userData[0])); // "Users" 

Wie Sie oben Spalten angeben sehen nicht Modell Instanzen zurück, sondern Instanzen Reihe, die nicht über die Methoden/Beziehungen, wie Sie bereits für sich selbst sah.

Es gibt einen Weg, um es zu erreichen, aber erfordert einige zusätzliche Anstrengungen, und ich bin mir nicht sicher, ob es das wert ist. Sie können mehr in this forum topic lesen und folgen Sie den angegebenen Links.

+0

Ich kann verstehen, was Sie erklärt haben, aber ich brauche etwas, das sowohl Benutzer-Objekt und Spaltenauswahl aus Tabelle behandeln kann. –

0

Soweit ich weiß, ist es unmöglich. Beziehung hat alle Spalten. Warum nicht ?

oder so:

$userData = User::query() 
->columns(["User.id", "User.username"]) 
->innerJoin("UserPhoto") 
->execute();