2017-05-28 2 views
0

I Problem habe 2 Tisch zu setzen, wenn ich Schlag Code ausführen das Ergebnis Code korrekt, aber nicht zeigen, Stiftfeld aus ticket_pin in Folgenicht verbinden Tabellenfeld in yii2 beitreten

$model = Ticket::find()->leftJoin(TicketPin::tableName(), 'ticket.id=ticket_pin.ticket_id and ticket_pin.user_id=1')->all(); 

       [id] => 1 
       [user_id] => 1 
       [receiver_user_id] => 
       [title] => بسش 
       [problem] => شسبس 
       [text] => سشب 
       [receiver] => 1 
       [priority] => 1 
       [status] => 4 
       [seen] => 
       [online] => 
       [created_at] => 1490588016 

aber wenn ich benutze create es ist das Ergebnis richtig zeigt, aber ich brauche Active

Yii::$app->db->createCommand('SELECT * FROM ticket LEFT JOIN ticket_pin ON ticket.id=ticket_pin.ticket_id and ticket_pin.user_id=1 order by ticket.id DESC')->queryAll(); 

     [id] => 
     [user_id] => 
     [reciver_user_id] => 1 
     [title] => سس 
     [problem] => afsfsa 
     [text] => sfaaf 
     [reciver] => 
     [priority] => 1 
     [status] => 4 
     [seen] => 0 
     [online] => 
     [{"user_id":2,"name":"\u0645\u062d\u0645\u062f","time":1491378729}] 
     [created_at] => 1491378692 
     [ticket_id] => 
     [pin] => 

Antwort

0

Sie können nicht TicketPin Attribute von Ticket AR-Modell bekommen selbst verwenden, aber Sie können TicketPin von Ticket Beziehung zugreifen (wenn Sie es implementiert, oder i f Gii hat es für dich gemacht).

Wenn Ticket viele TicketPins hat dann denke ich, diese Art der Abfrage für Ihren Fall richtig sein:

$tickets = Ticket::find()->joinWith(['ticketPins' => function(ActiveQuery $query) { 
    $query->andWhere(['ticket_pin.user_id' => 1]); 
}])->all(); 

foreach($tickets as $ticket) { 
    foreach($ticket->ticketPins as $ticketPin) { 
     echo $ticketPin->pin //Something like that 
    } 
} 

Also, diesen Code zu erklären, erhalten Sie Ticket-Modelle mit Eager loaded TicketPins innen (user_id=1 Filterung ist in anonymer Funktion enthalten). Entschuldigung, wenn der angegebene Code einige Fehler enthält. Ich glaube, dass Sie es überprüfen und es für Ihr Projekt nützlich machen können

+0

danke für deine entscheidung ich habe es aber ein problem haben. in Folge erwähnt, dass ich in anderem Kommentar, aber das Problem ist foreach ($ Tickets wie $ Ticket) { echo $ Ticket-> pin // etwas wie die } Ersten unbekannte Eigenschaft: app \ model \ Ticket :: Pin –

+0

@ Mohammad-Zahedimohammad Oh .. Entschuldigung Mann, ich vermisste eine Sache. Gerade jetzt wird meine frühere Antwort – Yerke

2

Durch die folgende Abfrage erhalten Sie Ticket Modellattribute. Wenn Sie TicketPin Modellattribute erhalten möchten, definieren Sie sie in Ticket Modell.

$model = Ticket::find()->leftJoin(TicketPin::tableName(), 'ticket.id=ticket_pin.ticket_id and ticket_pin.user_id=1')->all(); 

erste Attribut in Ticket Modellklasse definieren, wie unten:

public $pin; // assuming you need pin attribute 

Jetzt in Abfrage select-Anweisung hinzu:

$model = Ticket::find()->select('ticket.*,ticket_pin.pin')->leftJoin(TicketPin::tableName(), 'ticket.id=ticket_pin.ticket_id and ticket_pin.user_id=1')->all(); 

jetzt Sie Pinattribut bekommen.

-> Zweite Möglichkeit ist die Abfrage Ausgabe als Array, so dass keine Attribute im Modell definiert werden müssen.

$model = Ticket::find()->select('ticket.*,ticket_pin.pin')->leftJoin(TicketPin::tableName(), 'ticket.id=ticket_pin.ticket_id and ticket_pin.user_id=1')->asArray()->all(); 
+0

Dank für Ihre Entschuldigung, es funktioniert richtig Ich habe keine Erlaubnis, Ihren Beitrag zu mögen –

Verwandte Themen