У меня есть три таблицы - Председатель, Назначение, Члены.
МОЕ требование состоит в том, чтобы сопоставить члена с председателем и назначить члену роль.
Я смог получить список членов под председателем, когда у меня были председателя_id и обозначение_id в таблице участников.
Поскольку председатель меняется, большинство членов остаются нетронутыми. И я придумал их индексировать.
Table - membermap
id | chairman_id | designation_id | member_id
Таким образом, сохраняется список, сколько председателей приходит и уходит. Мне не нужно создавать новый профиль для нового председателя, а не сопоставлять его.
Теперь я уверен, как мне это сделать,
Пока мне удалось получить идентификатор, но я не уверен, как мне присоединиться к таблицам.
Столы
Chairman
id| name
Designation
id|designation
Members
id|members
Вот мой контроллер
$mapmember = Statechairman::findOrFail($id)->statechairmembersmap;
dd($mapmember);
В этом я получаю карту statechairmembersmap, но она извлекает весь результат и не ограничивает совпадение.
Я также пытался присоединиться к запросу, используя БД
$mapmember = DB::table('statechairmen')
->join('state_chairman_members_maps', 'state_chairman_members_maps.chairman_id','statechairmen.id')
->join('statemembers','statemembers.id','state_chairman_members_maps.members_id')
->select('state_chairman_members_maps.*')->get();
but this result show me the Table - membermap but not the other results.
Мои модели:
Председатель:
public function statechairmembersmap(){
return $this->hasMany('App\StateChairmanMembersMap','chairman_id','id');
}
public function statemembers(){
return $this->hasMany('App\Statemembers','chairman_id', 'id');
}
public function statedesignation(){
return $this->hasMany('App\Statedesignation','id','designation_id');
}
Карта участников:
protected $table = 'state_chairman_members_maps';
protected $dates = ['deleted_at'];
public function statechairman(){
return $this->belongsTo('App\Statechairman','id');
}
public function statedesignations(){
return $this->belongsTo('App\Statedesignation','designation_id','id');
}
public function statemembers(){
return $this->belongsTo('App\Statemembers','members_id','id');
}
Пожалуйста, помогите мне, где я делаю неправильно.
@ViperTecPro Я добавил '=', но это не работает, $mapmember = DB::table('statechairmen') ->join('state_chairman_members_maps', 'state_chairman_members_maps.chairman_id','=', 'statechairmen.id') - >join('statemembers','statemembers.id','=', 'state_chairman_members_maps.members_id') ->select('state_chairman_members_maps.*')->get(); Он по-прежнему показывает мне только результат таблицы StateChairmanMembersMap
Большое спасибо за проверку вопроса. Наконец, после долгих мучений, я смог найти его сам.
$mapmembers = DB::table('state_chairman_members_maps')
->join('statechairmen','statechairmen.id','=','state_chairman_members_maps.chairman_id')
->join('statemembers','statemembers.id','=','state_chairman_members_maps.members_id')
->join('statedesignations','statedesignations.id','=','state_chairman_members_maps.designation_id')
->where('chairman_id','=',$id)
->get();
Вот что я придумал.
Здесь я объединил 3 таблицы и сопоставил идентификатор, исходящий от председателя, чтобы отфильтровать результат. Я получаю результаты.
добавить
, '=',
между запросами на соединение