Laravel在加载Eagle的Join表中获取最新字段



Laravel版本:7.0

我将从Guest模型中获取列表。

guests table: id, name, status, created_at, updated_at
$guests = Guest::orderby("status")->get();

这是messages表格。

$messages table: id, message, from_id, from_type, to_id, to_type

CCD_ 3、CCD_ 4可以是访客也可以是用户。

如果我得到最新的消息与懒惰加载,我可以得到如下。

foreach($guests as $guest)
{
$lastMessage = Message::where(function($query) use($guest){
$query->where("from_id", $guest->id);
$query->where("from_type", "guest");
})
->orWhere(function($query) use($guest){
$query->where("to_id", $guest->id);
$query->where("to_type", "guest");
})->latest()->first();
}

然而,我知道这太疯狂了。如何使用Eagle加载获取此信息?

有人能给我一些指导吗?

一种解决方案是将其作为属性添加到用户模型中,如下所示

public function getLatestMessageAttribute()
{
return Message::where(function($query) use($guest){
$query->where("from_id", $this->id);
$query->where("from_type", "guest");
})
->orWhere(function($query) use($guest){
$query->where("to_id", $this->id);
$query->where("to_type", "guest");
})->latest()->first();
}

然后你需要添加到$append数组:

protected $appends = ['latest_message'];

相关内容

  • 没有找到相关文章

最新更新