Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » Проблема с получением pivot в Eloquent ORM » 26.03.2015 05:57:07

Можно конечно указать имя колонки с таблицей:

PHP
$account App\Account::find(108);
$role $account->roles()->where('role.id','='106)->first();
dump($role->pivot); // Вернет соотвествующий App\AccountRole

Но это как-то совсем стремно. Для чего тогда ORM?

#2 Laravel 5.x » Проблема с получением pivot в Eloquent ORM » 26.03.2015 05:39:23

DrLines
Ответов: 2

Здравия желаю.

Есть таблицы account, account_role, role
один Account может принадлежать нескольким Role сразу.
Есть связующая таблица account_role — которая связывает их по account_id и role_id
Link: er-диаграмма

В модели Account для этого сделана связь:

PHP
public function roles()
{
    return 
$this->belongsToMany('App\Role''account_role''account_id''role_id''App\AccountRole');
}

И она нормально работает, выводит соотвествующие роли как надо.
Но проблема возникла, когда появилась задача вывести для конкретной роли аккаунта некоторые данные из связующей таблицы account_role
И первое, что пришло на ум, это сделать так:

PHP
$account App\Account::find(1);
$role $account->roles()->find($roleId);
dump($role->pivot); // Вернет NULL, хотя в $role содержится нужный App\Role

Если же проверить наличие pivot в коллекции, то он там есть:

PHP
$account App\Account::find(1);
$role $account->roles()->get()->last();
dump($role->pivot); // Вернет соотвествующий App\AccountRole

Такой эксперемент вернул все данные:

PHP
$account App\Account::find(1);
$role $account->roles()->first();
dump($role->pivot); // Вернет соотвествующий App\AccountRole

Но мне нужно pivot только конкретной роли, попытка не удалась:

PHP
$account App\Account::find(1);
$role $account->roles()->whereId($roleId)->first(); // Exception - SQLSTATE[42702]: Ambiguous column: 7 ERROR: column reference "id" is ambiguous
dump($role->pivot);

Видно, что он не понимает, к какой таблице этот ID относится:
Link: Скрин ошибки

Но как её указать по нормальному?

Подвал раздела