我试图通过发送用户ID数组将用户列表附加到事件上,在Laravel中我具有以下表结构。
事件(表)
Schema::create('events', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->string('slug');
$table->timestamps();
});
Schema::table('events', function($table) {
$table->foreign('organiser_id')->references('id')->on('tutors')->onDelete('cascade');
$table->foreign('category_id')->references('id')->on('event_categories')->onDelete('cascade');
$table->foreign('city_id')->references('id')->on('cities')->onDelete('cascade');
});
事件用户(表)
Schema::create('event_user', function (Blueprint $table) {
$table->increments('id');
$table->integer('event_id')->nullable()->unsigned();
$table->integer('user_id')->nullable()->unsigned();
$table->boolean('is_speaker');
$table->timestamps();
});
Schema::table('event_user', function($table) {
$table->foreign('event_id')->references('id')->on('events')->onDelete('cascade')->onUpdate('cascade');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
});
事件控制器(存储方法)
$events = new Events;
$events->organiser_id = $request->user()->id;
$events->save();
$speakers = User::find($request->user()->id);
$speakers->events()->detach();
$speakers->events()->attach($request->speakers_list, ['is_speaker' => true]);
事件(模型)
public function users(){
return $this->belongsToMany(User::class, 'users');
}
用户(模型)
public function events(){
return $this->belongsToMany(Events::class, 'event_user', 'event_id', 'user_id')->withTimestamps();
}
当我尝试为用户附加事件时,出现以下错误
消息:“ SQLSTATE [23000]:违反完整性约束:
1452无法添加或更新子行:外键约束失败(
acp_db
。event_user
,CONSTRAINTevent_user_event_id_foreign
外键(event_id
))参考events
(id
)删除级联更新级联)((SQL:插入
event_user
,created_at
,event_id
,is_speaker
,updated_at
,user_id
)值(2020-03-15 19:49:49,11,1,2020- 03-15 19:49:49,12),(2020-03-15 19:49:49,11,1,2020-03-15 19:49:49,13))“
您正在向users
Event::users()
提供表名many-to-many relationship。由于您使用的是正确的命名约定,因此在任何一个关系定义中都不需要任何参数:
class Event extends Model
{
public function users() {
return $this->belongsToMany(User::class);
}
}
class User extends Model
{
public function events() {
return $this->belongsToMany(Event::class);
}
}