Извлечь данные, которых нет в столбце сводной таблицы - Laravel 6 - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть две таблицы, а именно:

1. users
columns: id, name

2. user_access
columns: id, user_id, user_access_id

user access - это сводная таблица, которая определяет отношения между users таблицей и users самой таблицей. Например, пользователь может иметь доступ к данным некоторых других пользователей.

Я определил это отношение в User модели.

Теперь я хочу получить эти идентификаторы пользователя для пользователя, который не существует в таблице user_access. Например, пользователь может иметь доступ к идентификаторам 1 и 2, но у него нет доступа к идентификаторам 3 и 4, поэтому я хочу получить идентификаторы 3 и 4, а не 1 и 2.

Для этого Я использую whereDoesntHave eloquent, но он не работает для отношений с теми же таблицами, и я получаю следующую ошибку

Facade\Ignition\Exceptions\ViewException
Call to undefined method Illuminate\Database\Eloquent\Builder::getRelated() (View: C:\xampp\htdocs\prd_tracker\resources\views\tracker\ticket\script.blade.php)

, но она работает для разных таблиц.

Вот мой код

Модель пользователя

public function userAccess()
    {
        return $this->belongsToMany('App\User', 'user_access', 'user_id', 'user_access_id')->using('App\USER_ACCESS');
    }

Logi c

use App\User;

        $user_id = Auth::user()->id;

        //Get All Those Users Ids Which Does Not Belong To Auth User
        $exception_user_ids = User::whereDoesntHave('users', function ($query) use($user_id) {
          $query->where('user_id', $user_id);
        })
        ->pluck('id');

1 Ответ

0 голосов
/ 01 апреля 2020

Ошибка может быть в модели User.

Модель App\User не может belongsToMany() сама по себе ... App\User.

Полагаю, вам может понадобиться модель UserAccess.

Попробуйте:

Модель пользователя

public function userAccess()
{
    return $this->belongsToMany('App\UserAccess', 'user_access', 'user_id', 'user_access_id')
}

или попробуйте hasMany отношение:

Модель пользователя

public function userAccess()
{   
    return $this->hasMany('App\UserAccess', 'user_id', 'id');
}

https://laravel.com/docs/7.x/eloquent-relationships#many-ко-многим

https://laravel.com/docs/7.x/eloquent-relationships#one -в-много

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...