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'];