laravel Eagle负载和限制



我遇到了这个问题:我有人的模型和他们的活动的模型,我想在人的模型中声明像最新活动一样的关系,但Laravel不允许在Eagle Loads 中使用"Limit"或"Take">

那么如何才能做到呢?

我试过这种人内模型

public function lastActivity()
{
return $this->belongsToMany('AppModelsActivity','activity_job','job_id','activity_id')
->orderByDesc('created_at')->limit(1);
}

但这需要一个人的最新活动,而不是所有人请帮助

假设您有一个模型人物(或人物,不管怎样…)

(Person.php)

class Person extends Model {
protected $table = 'persons';

public function activities()
{
return $this->hasMany(Activity::class);
}
...
}

和一个模型活动(Activity.php)

class Activity extends Model {
...
public function person()
{
return $this->belongsTo(Person::class);
}
...
}

现在获取所有人的最新活动

Person::with(['activities' => function ($query) {
$query->orderBy('id', 'desc');
}])->get()
->map(function ($person) {
$person->setRelation('activities', $person->activities->take(1));
return $person;
});

说明:我们让所有人都参与他们的所有活动。然后,我们映射集合,并(重新)设置与活动集合中的一个项目的活动关系。因为我们按id降序排列活动,所以take(1)将为我们提供人员的最新活动。

相关内容

  • 没有找到相关文章

最新更新