我怎样才能得到yii2中给定外键的最后一行以及关系?

问题描述 投票:0回答:1

我有2张桌子

tickets:
-id
etc..

comments:
-id
-ticket_id
-datetime
etc...

ticket_id 是发表评论的工单 ID。

这样一张票可以有0个或多个评论

我应该如何在我的票证模型中创建一个关系,以获取它的最后一条评论?

我的门票模型的一部分:


class Ticket extends ActiveRecord
{
public function getComments(): ActiveQuery
    {
        return $this->hasMany(Comment::class, ['ticket_id' => 'id']);
    }

    public function getHandler(): ActiveQuery
    {
        return $this->hasOne(User::class, ['id' => 'handler_id']);
    }

    public function getLastComment()
    {
        //???
    }
}


php postgresql yii2
1个回答
0
投票

要在

Ticket
模型中创建关系以获取其最后一条注释,您可以定义一个名为
getLastComment
的方法。此方法将根据
datetime
字段返回最后一条评论。您可以使用
orderBy
方法按
datetime
降序对评论进行排序,然后使用
one()
获取最后一条评论。 具体方法如下:

class Ticket extends ActiveRecord
{
    public function getComments(): ActiveQuery
    {
        return $this->hasMany(Comment::class, ['ticket_id' => 'id']);
    }

    public function getHandler(): ActiveQuery
    {
        return $this->hasOne(User::class, ['id' => 'handler_id']);
    }

    public function getLastComment()
    {
        return $this->hasOne(Comment::class, ['ticket_id' => 'id'])
                    ->orderBy(['datetime' => SORT_DESC])
                    ->one();
    }
}
  1. hasOne(Comment::class, ['ticket_id' => 'id'])
    定义与
    Comment
    模型的关系。

  2. orderBy(['datetime' => SORT_DESC])
    按日期时间字段降序对评论进行排序。

  3. one()
    获取第一个结果,这是最新的评论。

现在,当您调用

$ticket->getLastComment()
时,它将返回与票证相关的最后一条评论,如果没有评论,则返回
null

© www.soinside.com 2019 - 2024. All rights reserved.