Laravel: нарушение ограничений целостности

Я изучаю некоторые Laravel и в какой-то момент мне пришлось перенастроить базу данных, потому что мне пришлось изменить таблицу. Я использую почтальон для тестирования, и один из методов API выдает ошибку:

SQLSTATE [23000]: Нарушение ограничения целостности: 19 Сбой ограничения NOT NULL: events.user_id (SQL: вставить в "События" Значения («sport», «title», «Players», «when», «description», «location», «updated_at», «creation_at») (Хоккей, Хоккей на траве, 12, 30/09/2018, Come join нас, парк Fairview, 2018-11-08 22:19:45, 2018-11-08 22:19:45))

так что, похоже, проблема с events.user_id, который я изменил в таблице с именем Events, чтобы иметь связь с таблицей Users. Некоторые примеры, которые я нашел при исследовании, относятся к полям таблицы, которые не были идентификаторами, поэтому я не знаю, как это выяснить, может быть, некоторые из вас могут мне помочь!

Вот миграции для событий и пользователей:

 public function up()
{
Schema::create('events', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
$table->string('sport');
$table->string('title');
$table->decimal('players', 8, 2);
$table->date('when');
$table->mediumText('description');
$table->string('location');
$table->timestamps();
});
}


public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}

Вот модели:

class Event extends Model
{
protected $fillable = [
'sport',
'title',
'players',
'when',
'description',
'location'
];

public function user()
{
return $this->belongsTo('App\User');
}

class User extends Authenticatable
{
use HasApiTokens, Notifiable;

/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];

/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];

public function events()
{
return $this->hasMany('App\Event');
}
}

И ниже метод API, который дает мне ошибку:

Route::post('/admin/create-event', function (Request $request) {
$data = $request->all();

$event = Event::create(
[
'sport' => $data['sport'],
'title' => $data['title'],
'players' => $data['players'],
'when' => $data['when'],
'description' => $data['description'],
'location' => $data['location'],
]
);

return $event;
});

Спасибо, парни!

Редактировать:

Route::middleware('auth:api')->post('/admin/create-event', function (Request $request) {
$user = $request->user();
$data = $request->all();

$event = Event::create(
[
'user_id' => \Auth::user()->id,
'sport' => $data['sport'],
'title' => $data['title'],
'players' => $data['players'],
'when' => $data['when'],
'description' => $data['description'],
'location' => $data['location'],
]
);

return $event;
});

0

Решение

Я думаю, что вы должны добавить ‘user_id’ к $ fillable класса Event:

class Event extends Model
{
protected $fillable = [
'sport',
'title',
'players',
'when',
'description',
'location',
'user_id'
];

public function user()
{
return $this->belongsTo('App\User');
}
}
0

Другие решения

Вам нужно передать user_id:

'user_id' => \Auth::user()->id

В приведенном выше примере требуется аутентифицированный пользователь в сеансе, но если вы делаете запрос с помощью почтальона, у вас, вероятно, его нет.

В любом случае вам нужно предоставить user_id, который будет храниться в базе данных.

РЕДАКТИРОВАТЬ

Метод Eloquent create скопирует в модель только атрибуты, определенные как fillable, Итак, у вас есть два варианта:

  • добавлять user_id в $fillable
  • использование newInstance вместо createвручную установите user_id с $event->user_id = ...и вручную сохраните $event модель с $event->save();
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector