我有一个M2M关系,连接表,在模型中设置为:
public function users()
{
return $this->belongsToMany(User::class, 'user_alert', 'alert_id', 'user_id');
}
public function alerts()
{
return $this->belongsToMany(Alert::class, 'user_alert', 'user_id', 'alert_id');
}
在编辑包含此行的警报时,我得到以下错误。
Alert::findOrFail($request->id)->users()->syncWithoutDetaching($users);
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`homestead`.`user_alert`, CONSTRAINT `user_alert_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE) (SQL: insert into `user_alert` (`alert_id`, `id`, `user_id`) values (43, 1, 0))
user_id参数0导致错误,我不知道它来自哪里。执行dd($users)
显示类似于以下内容:
array:5 [
0 => array:1 [
"id" => 1
]
1 => array:1 [
"id" => 1
]
2 => array:1 [
"id" => 2
]
]
0首次出现在对/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Concerns/InteractsWithPivotTable.php
的调用中
"file" => "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Concerns/InteractsWithPivotTable.php"
"line" => 254
"function" => "insert"
"class" => "Illuminate\Database\Query\Builder"
"type" => "->"
"args" => array:1 [▼
0 => & array:1 [▼
0 => array:3 [▼
"alert_id" => 43
"id" => 1
"user_id" => 0
]
]
]
]
令人沮丧的是,M2M关系在创建新警报时起作用。
我希望这不是太相关,但这是Laravel 7。
希望有人能给点建议!
1条答案
按热度按时间xt0899hw1#
问题出在$users数据的格式上。
syncWithoutDetaching
可以接受用户模型集合或用户id数组。不支持您提供的格式,因为它将数组键(在您的示例中为0,1,2)作为用户ID。因此,请为
syncWithoutDetaching
提供用户模型集合或用户ID数组。