不要合并 JOIN YiiII 中的表字段



我有问题加入2个表,当我执行打击代码正确的结果代码正确,但请勿在结果中显示ticket_pin中的PIN字段

 $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":"u0645u062du0645u062f","time":1491378729}]
        [created_at] => 1491378692
        [ticket_id] => 
        [pin] =>

通过以下查询,您正在获取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

现在在查询中添加选择语句:

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

现在您可以获得PIN属性。

->第二种方法将查询输出作为数组,这样做不需要在模型中定义属性。

  $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(); 

您无法从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过滤(。抱歉,如果给定代码包含一些错误。我相信您可以重新检查它,并使其对您的项目有用

最新更新