Laravel 6: выборка данных из нескольких сводных таблиц - PullRequest
2 голосов
/ 27 апреля 2020

У меня есть таблица фондов, которая содержит средства, связанные с различными факультетами, институтами, инициативами и т. Д. c. Фонд принадлежит ко многим факультетам, а факультеты могут иметь много фондов.

У меня также есть связь между многими пользователями и таблицей преподавателей, чтобы убедиться, что пользователь может видеть только средства, связанные с определенными c факультетами. .

funds table
--------------------
  id
  name
  ...

faculties table
--------------------
  id
  name
  ...

faculties_funds table
---------------------
  id
  faculty_id
  fund_id

users table
---------------------
  id
  fname
  ...

faculties_user
--------------------
  id
  faculty_user
  user_id

Вот как я определил свои отношения:

class Fund extends Model
{
  public function faculties(){
        return $this -> belongsToMany('App\Faculty');
    }
}

class Faculty extends Model
{
  public function funds(){
        return $this -> belongsToMany('App\Fund');
    }
  public function users(){
        return $this -> belongsToMany('App\User');
    }
}

class User extends Model{
  public function faculties(){
        return $this -> belongsToMany('App\Faculty');
    }
}

Мне нужно иметь возможность получить все средства, связанные с преподавательским составом, который сопоставлен авторизованному пользователю. к. Я протестировал отношения по отдельности, и все они работают, и я могу получить ответ, который также имеет массив отношений с сводной информацией, но я почему-то не могу получить желаемые средства.

Любая помощь будет полезна с точки зрения написания запроса, чтобы получить результаты, желательно без использования необработанных запросов или если мне нужно переделать структуру моей базы данных.

Вот мой код:

public function index()
    {
        $user = Auth::user();
        if(Auth::user() -> role == 'superadmin'){
            return view('funds.index')
                    -> with('funds', Fund::all());
        }else{
            dd( Auth::user() -> faculties); //I can see the faculties associated and also 
            dd( Auth::user() -> faculties() -> funds ); //doesnt work
        }
    }

DD Response

1 Ответ

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

Соглашение об именах таблиц не соответствует ожиданиям Laravel: https://laravel.com/docs/7.x/eloquent-relationships#many-ко-многим

Этот модифицированный код должен возвращать ваши средства, как и ожидалось:

class Faculty extends Model
{
  public function funds(){
        return $this -> belongsToMany('App\Fund', 'faculties_funds', 'falculty_id', 'fund_id');
    }
}

class User extends Model{
  public function faculties(){
        return $this -> belongsToMany('App\Faculty','faculties_user');
    }
}

А потом звоните

dd(Auth::user()->with('faculties.funds');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...