Laravel 5.6为事件添加多个用户(发言人)

问题描述 投票:0回答:1

我试图通过发送用户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_dbevent_user,CONSTRAINT event_user_event_id_foreign外键(event_id))参考eventsid)删除级联更新级联)

((SQL:插入event_usercreated_atevent_idis_speakerupdated_atuser_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))“

php laravel eloquent eloquent--relationship
1个回答
0
投票

您正在向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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.