Это структура, которую я сейчас использую
Пользователь модели:
class User extends Authenticatable implements MustVerifyEmail
public function groups()
{
return $this->belongsToMany('App\Group')
->withTimestamps();
}
Группа моделей:
class Group extends Model
public function users() {
return $this->belongsToMany('App\User')
->withTimestamps();
}
Сводная таблица:
Schema::create('group_user', function (Blueprint $table) {
$table->integer('group_id');
$table->integer('user_id');
$table->integer('role_id')->nullable();
$table->timestamps();
});
Я хотел бы получить всех пользователей, которые находятся в тех же группах, что и текущий пользователь, и не возвращать повторяющихся пользователей (пользователь может быть в нескольких группах). Идеальные функции:
$user->contacts()
// Return an object with (unique) contacts of all current user groups
AND
$user->groupContacts($group)
// Witch is the same as $group->users
// Return an object with all the users of the current group
Есть нефункциональная функция, над которой я работаю (модель User.php):
public function contacts()
{
$groups = $this->groups;
$contacts = new \stdClass();
foreach ($groups as $key => $group) :
$contacts->$key = $group->users;
endforeach;
return $contacts;
}
Я действительно не эксперт по структурам таблиц, поэтому, если есть лучший способ сделать это, я только в начале этого личного проекта, так что ничего не высечено на камне.
Необязательные материалы:
- Исключить текущего пользователя из списка
- С ролями из сводной таблицы
- С программным удалением