ОБНОВЛЕНИЕ: посмотрев на класс Eloquent hasManyThrough, не меняя его, я не вижу, как я могу связать приведенные ниже таблицы. Заявления Params для вызова метода является:Laravel 5 Eloquent HasManyThrough - имена столбцов в ссылках
class HasManyThrough extends Relation
{
/**
* The distance parent model instance.
*
* @var \Illuminate\Database\Eloquent\Model
*/
protected $farParent; // in my case: User::class
/**
* The near key on the relationship.
*
* @var string
*/
protected $firstKey; // in my case: organisation_users_roles(organisation_id)
/**
* The far key on the relationship.
*
* @var string
*/
protected $secondKey; // in my case: users(id)
/**
* The local key on the relationship.
*
* @var string
*/
protected $localKey; // in my case: organisation(id)
Таким образом, нет никакого способа узнать, стандартный Красноречивый hasManyThrough
, что первое звено organisation(id)->organisation_users_roles(organisation_id)
и вторая ссылка organisation_users_roles(user_id)->users(id)
ли я неправильно?
Я не могу найти пример синтаксиса для использования, если у вас есть три таблиц связаны через hasManyThrough
и имена столбцов в каждой таблице, не следует за именованием Красноречивого. В моем случае:
три таблицы:
Organisations
Users
Roles
Organisation_Users_Roles (3 way linking)
Поскольку они принадлежат к уже существующему приложению, я не могу изменить/переименовать столбцы.
Имен столбцов зацеплений являются:
`Organisation: id` links to `Organisation_Users_Roles: organisation_id"
`Users: id` links to `Organisation_Users_Roles: user_id"
`Roles: id` links to `Roles: role_id"
Organisation_Users_Roles
также содержит id
столбца (по существу, его первичный ключ или идентификатор строки).
Я попытался (в качестве примера) в Organisation
классе:
public function users()
{
return $this->hasManyThrough(User::class, OrganisationUserRole::class);
}
В примере DOCS таблицы являются:
countries
id - integer
name - string
users
id - integer
country_id - integer
name - string
posts
id - integer
user_id - integer
title - string
Так, в примере:
country(id)->users(country_id)
и users(id)->posts(user_id)
И в моем случае:
organisation(id)->organisation_users_roles(organisation_id)
и organisation_users_roles(user_id)->users(id)
Но так как имена столбцов не являются точными, к примеру на красноречивые Docs (как это связующая таблица три способа), то я получаю следующее сообщение об ошибке при использовании метода:
[PDOException]
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'users.user_role_id' in 'on clause'
Я хочу, чтобы получить первый возвращаемый пользователю для текущей организации, я называю это так:
$entry['created_user_id'] = $organisation->users->first();
Благодаря
Привет Бхарат, он не работает. Я не получаю 'users.user_id'. – TheRealPapa
См. Мой отредактированный ответ –
Привет, Bharat, это возвращает null, что неверно. Запрос работает, но связь между двумя таблицами некорректно построена ('user_role'.'id' =' users'.'id') – TheRealPapa