Laravel 5.6 Присоединение нескольких пользователей (докладчиков) к событию - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь прикрепить список пользователей к событиям, отправив массив идентификаторов пользователей, у меня есть следующая структура таблицы в 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 ИНОСТРАННЫЙ КЛЮЧ (event_id) ССЫЛКИ events (id) НА УДАЛИТЬ КАСКАД НА ОБНОВЛЕНИЕ КАСКАД)

(SQL: вставить в event_user (* Значения 1042 *, 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)) "

1 Ответ

1 голос
/ 16 марта 2020

Вы предоставляете имя таблицы users для отношения Event::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);
    }
}
...