【发布时间】:2019-04-12 12:30:55
【问题描述】:
我正在研究一些 Laravel,在某些时候我不得不重新迁移数据库,因为我必须更改一个表。我正在使用邮递员进行测试,其中一种api方法给了我错误:
SQLSTATE[23000]:完整性约束违规:19 NOT NULL 约束失败:events.user_id(SQL:插入“事件”(“运动”、“标题”、“玩家”、“何时”、“描述”、 "location", "updated_at", "created_at") 值 (Hockey, Grass Hockey, 12, 30/09/2018, 加入我们, Fairview park, 2018-11-08 22:19:45, 2018-11-08 22:19:45))
所以这似乎是 events.user_id 的问题,我在名为 Events 的表上更改了它以与 Users 表建立关系。我通过研究发现的一些示例是在不是 ids 的表字段上,所以我不知道如何弄清楚这一点,也许你们中的一些人可以帮助我!
这里是事件和用户的迁移:
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;
});
【问题讨论】:
标签: php laravel postman migrate