0

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

from_type,to_type可以是访客或用户。

如果我收到延迟加载的最新消息,我可以得到以下信息。

  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();
  }

但是,我知道这很疯狂。我怎样才能通过急切加载得到这个?

谁能给我一些指导?

4

1 回答 1

0

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

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'];
于 2020-08-06T06:40:59.383 回答