У меня проблема присоединиться к таблице 2, когда я выполняю код удара, код результата правильный, но в результате не отображается поле пин-кода из ticket_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":"\u0645\u062d\u0645\u062f","time":1491378729}]
        [created_at] => 1491378692
        [ticket_id] => 
        [pin] =>
0
mohammad zahedi 28 Май 2017 в 13:59

2 ответа

Лучший ответ

Вы не можете получить атрибуты TicketPin из самой модели AR Ticket, но вы можете получить доступ к TicketPin из отношения Ticket (если вы его реализовали или если Gii сделал это для вас).

Если Ticket имеет много 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
    }
}

Итак, объясняя этот код, вы получаете модели Ticket с загруженными в TagerPins Eager внутри (фильтрация user_id=1 включена в анонимную функцию). Извините, если данный код содержит ошибки. Я считаю, что вы можете перепроверить и сделать его полезным для вашего проекта

0
Yerke 29 Май 2017 в 16:00

По нижеследующему запросу вы получаете Ticket атрибуты модели. если вы хотите получить атрибуты модели TicketPin, чем определять их в модели Ticket.

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

Сначала определите атрибут в классе модели Ticket, как показано ниже:

 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(); 
2
Yasin Patel 29 Май 2017 в 04:41