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