->using();
Я обнаружил, что у Laravel есть способ сделать то, что я хотел из коробки, создав модель для сводной таблицы.
Это работает путем добавления ->using()
к функции модели return $this->belongsToMany()
.
Поместив имя вновь созданной сводной модели в метод ->using()
, мы можем затем вызвать любую функцию внутри этой сводной модели, как и любой другой красноречивый вызов.
Предполагая, что мои разрешения принадлежат многим ролям, а сводная таблица имеет 3-й столбец с именем «connected_by» (который является внешним ключом пользователя в таблице «Пользователи»):
Моя модель разрешений будет иметь:
public function roles()
{
return $this->belongsToMany('App\roles','permissions_roles','permissions_id','roles_id')
->using('App\link')
->withPivot('linked_by');
}
и новая модель ссылки будет содержать:
Обратите внимание, что расширяется ось, а НЕ модель
use Illuminate\Database\Eloquent\Relations\Pivot;
class link extends Pivot
{
//
protected $table = 'permissions_roles';
public function linkedBy()
{
return $this->belongsTo('App\users', 'linked_by');
}
}
Очевидно, что вам необходимо определить противоположную сторону отношения belongsToMany
в модели ролей, но как только это будет сделано, я могу использовать следующее, чтобы получить имя человека, связанного с первой ролью в connected_by. колонка:
permissions::find(1)->roles->first()->pivot->linked_by->name;