1

我遇到了这个问题:我有人员模型和他们的活动模型,我想在人员模型中声明最新活动的关系,但Laravel 不允许在Eager Loads 中使用“限制”或“采取”

那么怎么做呢?

我在人模型内部试过这个

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

但这需要一个人的最新活动并不适用于所有人请帮助

4

1 回答 1

1

假设您有一个模型人(或人,无论如何......)

(人.php)

class Person extends Model {

    protected $table = 'persons';


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

    ...
}

和一个模型 Activity (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) 将为我们提供人员的最新活动。

于 2021-05-22T15:15:33.500 回答