Отображение столбца 'user_id' в списке полей неоднозначно при попытке получить данные от многих ко многим отношениям laravel - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь получить данные из реляционной таблицы m2m, используя этот запрос. Вот мой код в модели:

Пользователь. php

public function roles()
{
    return $this->belongsToMany(Role::class, 'role_user', 'user_id', 'role_id')->withTimestamps();
}

Роль. php

public function users()
{
    return $this->belongsToMany(User::class, 'role_user', 'role_id', 'user_id')->withTimestamps();
}

и мой запрос в контроллере:

$userDetails = Role::where('role_id', $roleId)->first()
            ->users()
            ->select('user_id', 'full_name', 'phone_no')
            ->where('is_active', 1)
            ->get();

Но это показывает Column 'user_id' in field list is ambiguous. После поиска решения в Интернете я обнаружил, что при выборе имени таблицы ставить префикс имени таблицы users.user_id. Но это показывает Unknown column users.user_id. может кто-нибудь помочь мне с этим.

Ответы [ 2 ]

2 голосов
/ 16 марта 2020

'user_id' в списке полей является неоднозначным означает, что столбец user_id присутствует в обеих ваших таблицах.

Вы должны указать, какую таблицу user_id вы хотите использовать в своем запрос.

Изменить

->select('user_id', 'full_name', 'phone_no')

на

->select('roles.user_id', 'full_name', 'phone_no')
1 голос
/ 16 марта 2020

Как @Sehdev заявляет:

'user_id' в списке полей неоднозначно означает, что столбец user_id присутствует в обеих ваших таблицах.

Вы должны указать, какую таблицу user_id вы хотите использовать в вашем запросе.

Это стандартная ошибка SQL, которую можно исправить, указав явно, к какой таблице относится столбец n следующим образом:

'roles.user_id'

Красноречивые отношения

Я подумал, что стоит указать, что выполняемые вами запросы могут выполняться с использованием Eloquent, например, так:

$role = Role::find('role_id', $roleId)->with(['users' => function ($query) {
    $query->where('is_active', 1);
}]);

Затем вы можете использовать их в своем контроллере, когда будете sh, просто получив доступ к users отношению к роли следующим образом:

$role->users

Или в шаблоне блейда, например:

@foreach ($role->users as $user)
    {{ $user->user_id }}
    {{ $user->fullname }}
    {{ $user->phone_no }}
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...