【问题标题】:Laravel 5.6 Attach Multiple Users (Speakers) with the EventLaravel 5.6 将多个用户(演讲者)附加到事件中
【发布时间】:2020-03-15 19:51:48
【问题描述】:

我正在尝试通过发送一组用户 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, CONSTRAINT event_user_event_id_foreign FOREIGN KEY (event_id) REFERENCES events (id) ON DELETE CASCADE ON更新级联)

(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))"

【问题讨论】:

    标签: php laravel eloquent eloquent-relationship


    【解决方案1】:

    您正在向Event::users() many-to-many relationship 提供表名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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-12-07
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多