Laravel HasManyThrough关系深厚



我有一个多租户设置,其中租户HasMany工作空间和工作空间BelongsToMany学生。如何从租户创建关系,以便从租户内的所有工作区检索所有学生?

我已经看了hasManyThrough,但这并不能解决问题。现在我有这个函数:

public function getStudents()
{
$this->workspaces()->get()->map(function ($workspace) {
return $workspace->students;
})->flatten()->unique();
}

但是我想在一个关系中做,而不是上面的代码。任何建议吗?

Tenant :HasMany=> Workspace(tenant_id) :BelongsToMany=> Student(student_workspace table)

提前感谢!

您可以通过join这样做:

public function students(){
return Student::select('students.*')
->join('student_workspace', 'students.id', '=', 'student_workspace.student_id')
->join('workspaces', 'workspaces.id', '=', 'student_workspace.workspace_id')
->join('tenants', 'tenants.id', '=', 'workspaces.tenant_id')
->where('tenants.id', $this->id);
}

或者像任何正常的关系一样,使用这个包:hasManyDeep通过以下步骤:

:

composer require staudenmeir/eloquent-has-many-deep

在您的Workspace模型文件中:

public function students()
{
return $this->belongsToMany(Student::class, 'student_workspace');
}

在您的Tenant模型文件:

use StaudenmeirEloquentHasManyDeepHasRelationships;
class Tenant extends Model
{
use HasFactory, HasRelationships;
public function students(){
return $this->hasManyDeepFromRelations($this->workspaces(), (new Workspace)->students());
}
}

希望对大家有帮助。

相关内容

  • 没有找到相关文章

最新更新