Как добавить 2 промежуточные таблицы в красноречивые отношения

#php #mysql #laravel #eloquent #laravel-5.8

#php #mysql #laravel #eloquent #laravel-5.8

Вопрос:

Как написать запрос ниже в красноречивой форме. Eloquent кажется хорошим с отношением 2 таблицы, но с отношением 4 таблицы и group_concat он не работает должным образом. Приведенный ниже код работает нормально, просто нужно знать, как я могу получить приведенный ниже код в формате eloquent.

Отношение выглядит следующим
образом Таблицы> Столбцы:
mrs> идентификатор, имя
mr_regions > идентификатор, mrs_id (таблица mrs), regions_id (таблица регионов)
регионы> идентификатор, имя, headquaters_id (таблица headquaters)
headquaters> идентификатор, имя

 DB::table('mrs as m')
->select(
    'm.id',
    'first_name',
    'last_name',
    'email',
    'designation',
    'mobile_number', 
    DB::raw('GROUP_CONCAT(DISTINCT r.name SEPARATOR ", ") AS regions'),
    DB::raw('GROUP_CONCAT(DISTINCT h.name SEPARATOR ", ") AS headquaters')
)
->join('mr_regions AS mr', function($join){
    $join->on('mr.mrs_id', '=', 'm.id');
    $join->on('mr.is_active', '=', DB::raw(Config('constants.STATUS_ACTIVE')));
})
->join('regions AS r', function($join){
    $join->on('r.id', '=', 'mr.mrs_id');
    $join->on('mr.is_active', '=', DB::raw(Config('constants.STATUS_ACTIVE')));
})
->join('headquaters AS h', function($join){
    $join->on('h.id', '=', 'r.headquaters_id');
    $join->on('h.is_active', '=', DB::raw(Config('constants.STATUS_ACTIVE')));
})
->where(function($where) use ($id){
    $where->where('m.is_active', Config('constants.STATUS_ACTIVE'));
    $where->where('m.id', '=', $id);
})
->groupby('m.id')
->first();
  

Комментарии:

1. С какой проблемой вы столкнулись, вы получили какие-либо ошибки?

2. Ошибки нет, просто хочу знать, как написать это в красноречивой форме

3. Я вижу там некоторые ошибки. regions это псевдоним некоторых объединенных полей, и join вы пытаетесь присоединиться к r.id where r — это псевдоним для regions . Вы должны все это реорганизовать.

4. @AndreiLupuleasa запрос работает нормально, только что запущен в моей системе. Можете ли вы помочь мне с написанием кода в формате eloquent