我有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()
{
//???
}
}
要在
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();
}
}
hasOne(Comment::class, ['ticket_id' => 'id'])
定义与 Comment
模型的关系。
orderBy(['datetime' => SORT_DESC])
按日期时间字段降序对评论进行排序。
one()
获取第一个结果,这是最新的评论。
现在,当您调用
$ticket->getLastComment()
时,它将返回与票证相关的最后一条评论,如果没有评论,则返回 null
。