2017-05-28 79 views
0

我有問題,加入2表,當我執行打擊碼結果代碼正確的,但是從ticket_pin在結果沒有顯示出銷區不合並表字段中加入yii2

$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 

但是當我使用createCommand它的正確顯示的結果,但我需要使用ActiveRecord

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] => 

回答

0

你不能得到Ticket AR模型本身TicketPin屬性,但你可以從Ticket關係訪問TicketPin(如果實現的話,還是我Gii爲你做的)。

如果票證已許多 TicketPins那麼我認爲,這種查詢將是正確的爲您的情況:

$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 
    } 
} 

所以,解釋這段代碼,你會得到裏面渴望加載TicketPins票務模型(user_id=1過濾包含在匿名函數中)。 對不起,如果給定的代碼包含一些錯誤。我相信你可以重新檢查它,並使其對你的項目有用

+0

感謝您的soultion我做到了,但有一些問題。 的結果我提其他意見, 但問題是 的foreach($門票$票){ 回聲$ ticket->銷//類似的東西 } 獲得未知屬性:應用程序\型號\票務:: pin –

+0

@ mohammad-zahedimohammad哦..對不起,我錯過了一件事。現在將更新我以前的回答 – Yerke

2

通過下面的查詢你會得到Ticket模型屬性。如果您想獲得TicketPin模型屬性,請在Ticket模型中定義它們。

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

第一定義票務模型類的屬性如下:

public $pin; // assuming you need pin attribute 

現在查詢添加select語句:

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

現在你可以得到銷屬性。

- >第二種方式是將查詢輸出作爲數組,這樣做不需要在模型中定義屬性。

$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

感謝您的靈魂,它的工作正常 我沒有權限喜歡你的文章 –