Laravel 5.6 将多个用户(发言人)附加到活动中
Laravel 5.6 Attach Multiple Users (Speakers) with the Event
我试图通过发送一组用户 ID 将用户列表附加到事件,我在 Laravel 中有以下 table 结构。
事件 (table)
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');
});
事件用户 (table)
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();
}
当我尝试将用户与事件相关联时,出现以下错误
message: "SQLSTATE[23000]: Integrity constraint violation:
1452 Cannot add or update a child row: a foreign key constraint fails (acp_db
.event_user
, CONSTRAINT event_user_event_id_foreign
FOREIGN KEY (event_id
) REFERENCES events
(id
) ON DELETE CASCADE ON UPDATE CASCADE)
(SQL: insert into event_user
(created_at
, event_id
, is_speaker
, updated_at
, user_id
) values (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))"
您正在向 Event::users()
many-to-many relationship 提供 table 名称 users
。由于您使用的是正确的命名约定,因此您不需要任何参数来定义关系:
class Event extends Model
{
public function users() {
return $this->belongsToMany(User::class);
}
}
class User extends Model
{
public function events() {
return $this->belongsToMany(Event::class);
}
}
我试图通过发送一组用户 ID 将用户列表附加到事件,我在 Laravel 中有以下 table 结构。
事件 (table)
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');
});
事件用户 (table)
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();
}
当我尝试将用户与事件相关联时,出现以下错误
message: "SQLSTATE[23000]: Integrity constraint violation:
1452 Cannot add or update a child row: a foreign key constraint fails (
acp_db
.event_user
, CONSTRAINTevent_user_event_id_foreign
FOREIGN KEY (event_id
) REFERENCESevents
(id
) ON DELETE CASCADE ON UPDATE CASCADE)(SQL: insert into
event_user
(created_at
,event_id
,is_speaker
,updated_at
,user_id
) values (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))"
您正在向 Event::users()
many-to-many relationship 提供 table 名称 users
。由于您使用的是正确的命名约定,因此您不需要任何参数来定义关系:
class Event extends Model
{
public function users() {
return $this->belongsToMany(User::class);
}
}
class User extends Model
{
public function events() {
return $this->belongsToMany(Event::class);
}
}