2017-05-28 107 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

感谢您的灵魂,它的工作正常 我没有权限喜欢你的文章 –