Я строю многопользовательскую систему на основе ролей в моем проекте Laravel 12. Пользователю получают роль в компании , он может иметь только одну роль в компании, но может назначить несколько компаний. Моя идеальная конечная настройка - иметь возможность запросить пользователя, с компанией, и, необязательно, и иметь некоторые результаты, которые выглядят так: < /p>
{
"email": "[email protected]",
"company": {
"id": 1,
"name": "Acme",
"pivot": {
"role_id"; 1,
"role": {
"role": "admin"
}
}
}
}
< /code>
или{
"email": "[email protected]",
"company": {
"id": 1,
"name": "Acme",
"role": {
"role": "admin"
}
}
}
У меня есть модель CompanyEntry , которая в настоящее время создает уникальные комбинации компании, пользователя и роли, она выглядит как:
Schema::create('company_entries', function (Blueprint $table) {
$table->id();
// must link to a user that logs in.
$table->foreignId('user_id')->index()->constrained()->cascadeOnUpdate()->cascadeOnDelete();
$table->foreignId('company_id')->index()->constrained()->cascadeOnUpdate()->cascadeOnDelete();
$table->foreignId('role_id')->index()->constrained()->cascadeOnUpdate()->cascadeOnDelete();
// booleans
$table->boolean('is_default')->default(0)->index();
// date/times
$table->timestamps();
// compound index
$table->index(['user_id', 'company_id']);
$table->index(['user_id', 'company_id', 'role_id']);
// create unique index
$table->unique([
'user_id',
'company_id',
'role_id'
], 'unique_user_company_index');
});
Как бы я достиг желаемого конечного результата, учитывая существующие отношения на моем пользователе модели:
/**
* Get the default company associated with the user
*/
public function company(): HasOneThrough
{
return $this->hasOneThrough(
Company::class,
CompanyEntry::class,
'user_id',
'id',
'id',
'company_id'
)->where('is_default', true)->orderBy('created_at', 'asc');
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... lationship
Присоединение к Laravel Pivot через отношения Hasonethrough ⇐ Php
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение