Я изучаю некоторые Laravel и в какой-то момент мне пришлось перенастроить базу данных, потому что мне пришлось изменить таблицу. Я использую почтальон для тестирования, и один из методов API выдает ошибку:
SQLSTATE [23000]: нарушение ограничения целостности: 19 Сбой ограничения NOT NULL: events.user_id (SQL: вставить в «events» («sport», «title», «Players», «when», «description», Значения "location", "updated_at", "creation_at") (Хоккей, Грасс Хоккей, 12, 30/09/2018, Присоединяйтесь к нам, Парк 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;
});
Спасибо, ребята!
Edit:
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;
});