Чтобы убедиться, что мы находимся в едином представлении о ваших отношениях:
Отношения между группами и действиями - это отношение «многие ко многим» ( «Многие ко многим - документация высокого уровня» ).
Таблица group_activities
является сводной таблицей.
Отношения между пользователями и группами - это отношение один ко многим Один ко многим - документация высокого уровня и обратное значениеit One To Many (Inverse) - документация Larvel .
Чтобы действительно ответить на ваш вопрос:
Если вы хотите использовать ярлык от пользователейВ их действиях есть Много Через, это правильный путь. Если у группы может быть произвольно много действий, и пользователь принадлежит к одной группе, пользователь будет связан с этими произвольно многими действиями через группу -hence Has Many Through. Обратите внимание, что это на самом деле не отдельное отношение, а просто удобный ярлык.
Если вы не хотите связывать пользователя с одним действием напрямую, вам нужно сделать это через отдельное отношение «Один ко многим». между пользователями и действиями.
Я не совсем уверен, правильно ли я интерпретирую ваш вопрос, поэтому следующее является лишь предположением, но вы хотите убедиться, что пользователь может быть связан только с действием, которое также связанос группой пользователей? Таким образом, чтобы ограничить возможные виды деятельности группой? В этом случае вам просто нужно проверить, относится ли выбранное действие к действиям, связанным с группой пользователей:
С такими настроенными отношениями:
class User {
public function activity(){
return $this->belongsTo('App\Activity');
}
public function possibleActivities(){
return $this->hasManyThrough('App\Activity','App\Group');
}
}
Вы можете проверить и связать действия, как это:
if( $user->possibleActivities()->contains( $activity ) ){
$user->activity()->associate($activity);
}