私は以前同様の質問をしましたが、それ以来多くの変更を行いましたが、今は別の問題があります。 スキーマを以下のように変更しました。ピボットテーブルを使用して多対多の関係を処理する
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('userName')->default('');
$table->string('userEmail')->default('');
$table->timestamps();
});
Schema::create('user_groups', function(Blueprint $table)
{
$table->increments('id');
$table->string('groupName')->default('');
$table->timestamps();
$table->softDeletes();
});
Schema::create('users_user_groups', function(Blueprint $table)
{
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->integer('group_id')->unsigned();
});
Schema::table('users_user_groups', function(Blueprint $table) {
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('group_id')->references('id')->on('user_groups');
});
基本的に、ユーザーは多数のuser_groupsに分かれていてもよく、user_groupsには多くのユーザーが存在できます。だから、多対多の関係 を調べているので、テーブルusers_user_groupsを追加しました。私はこれらの2つのために私のモデルを設定します。
class User extends Model
{
protected $table = 'users';
protected $guarded = [];
public function groups()
{
return $this->belongsToMany('App\Group', 'users_user_groups')->withPivot('user_id', 'group_id');
}
}
class Group extends Model
{
protected $table = 'user_groups';
protected $guarded = [];
public function profusionUser()
{
return $this->belongsToMany('App\User', 'pusers_user_groups')->withPivot('user_id', 'group_id');
}
}
私は確かに上記が正しく設定されていると確信しています。今この作業は私のUserControllerで行われます。中心的な機能は で、何が起きているのかを説明するためにコメントしようとしました。
public function updateUsers()
{
$users = Helper::returnUsersFromLdap(); //Get all users from Directory
foreach($users as $userName => $userData) {
$user = User::firstOrNew(['userName' => $userName]); //Create user if needed
foreach ($userData as $userEmail => $userDepartment) {
$name = preg_replace('/@.*?$/', '', $userEmail);
$user->userEmail = $userEmail;
$userGroups = Helper::returnGroupsFromLdap($name); //Get all user_groups user is apart off
foreach ($userGroups as $group) {
$usGroup = new Group(); //Create the user_groups
$usGroup->groupName = $group;
$usGroup->save();
}
$user->save();
$user->groups()->sync($userGroups); //Link the users groups to the user
}
}
return Redirect::route('users.index');
}
だから私のUSER_GROUPSテーブルがそのように
+-----+------------+---------------------+---------------------+------------+
| id | groupName | created_at | updated_at | deleted_at |
+-----+------------+---------------------+---------------------+------------+
| 1 | Group 1 | 2016-05-20 15:55:34 | 2016-05-20 15:55:34 | NULL |
| 2 | Group 2 | 2016-05-20 15:55:34 | 2016-05-20 15:55:34 | NULL |
| 3 | Group 3 | 2016-05-20 15:55:34 | 2016-05-20 15:55:34 | NULL |
| 4 | Group 4 | 2016-05-20 15:55:34 | 2016-05-20 15:55:34 | NULL |
| 5 | Group 1 | 2016-05-20 15:55:34 | 2016-05-20 15:55:34 | NULL |
| 6 | Group 3 | 2016-05-20 15:55:34 | 2016-05-20 15:55:34 | NULL |
| 7 | Group 2 | 2016-05-20 15:55:34 | 2016-05-20 15:55:34 | NULL |
| 8 | Group 5 | 2016-05-20 15:55:34 | 2016-05-20 15:55:34 | NULL |
| 9 | Group 1 | 2016-05-20 15:55:34 | 2016-05-20 15:55:34 | NULL |
| 10 | Group 2 | 2016-05-20 15:55:34 | 2016-05-20 15:55:34 | NULL |
| 11 | Group 1 | 2016-05-20 15:55:34 | 2016-05-20 15:55:34 | NULL |
| 12 | Group 3 | 2016-05-20 15:55:34 | 2016-05-20 15:55:34 | NULL |
のようなデータが移入された今、最初の問題は、私は、彼らがする必要がある場合はわからないときグループは、この表に繰り返されているということでしょうか? 2人のユーザーが同じ グループに属している場合、上記の2つのエントリが各ユーザーに1つずつ作成されます。どういうわけか私はこれをユニークにするべきですか?
私の2番目の問題は、ピボットテーブルに関するものです。これの出力はそうです
+-----+--------------------+
| id | user_id | group_id |
+-----+--------------------+
| 1 | 1 | 0 |
| 2 | 1 | 0 |
| 3 | 1 | 0 |
| 4 | 2 | 0 |
| 5 | 2 | 0 |
| 6 | 3 | 0 |
| 7 | 3 | 0 |
| 8 | 3 | 0 |
| 9 | 3 | 0 |
したがって、user_idは適切に更新されており、正しい回数です。だから私はid 1のユーザーが3つのグループに属していることを知っています。 しかし、何らかの理由でgroup_idが更新されていません。
これが正しく更新されない理由はありますか?任意の提案が評価されており、user_groupsのテーブルに関するいくつかの入力を得て、これに一意のグループ名を含めるべきかどうかを確認するのが良いでしょう。
感謝
テーブル定義のスクリーンショットを表示できますか?彼らの構造があなたが思うものであるかどうかを調べるだけです... – Amarnasan