我通过postman
在本地测试路由,发送JSON
对象,其中包含创建事件所需的属性和值:
// http://127.0.0.1:8000/api/events
{
"name": "Event 1",
"description": "Event 1 description",
"start_time": "2024-01-01 15:00:00",
"end_time": "2024-01-01 16:00:00"
}
字符串
型号Event
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Event extends Model
{
use HasFactory;
protected $fillable = [
'name',
'description',
'start_time',
'end_time',
'user_id',
];
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function attendee(): HasMany
{
return $this->hasMany(Attendee::class);
}
}
型
EventController
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Event;
use Illuminate\Http\Request;
class EventController extends Controller
{
public function store(Request $request)
{
$event = Event::create([
$request->validate([
'name' => 'required|string|max:255',
'description'=>'nullable|string',
'start_time' => 'required|date',
'end_time'=> 'required|date|after:start_time',
]),
'user_id'=>1
]);
return $event;
}
}
型
但我得到了这个错误对象响应:
"message": "SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default value (Connection: mysql, SQL: insert into `events` (`user_id`, `updated_at`, `created_at`) values (1, 2023-12-02 18:01:52, 2023-12-02 18:01:52))"
型
阅读消息时,控制器似乎没有接收到任何数据,因为它甚至没有尝试将它们插入到表中(名称,描述,开始时间,结束时间)
阅读关于错误,一些建议是我没有将这些列添加到我的$fillable,另一个建议是我将数据发送到数据库,并免除不可为空的字段或不能为空的字段。
但我没有陷入任何这些错误,所以可能是什么问题?提前感谢。
请不要犹豫,要求另一个代码块,如果需要的话。请注意,列和假数据是使用数据库工厂和种子生成的。
下面是migrations
事件:
<?php
use App\Models\User;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('events', function (Blueprint $table) {
$table->id();
$table->foreignIdFor(User::class);
$table->string('name');
$table->text('description')->nullable();
$table->dateTime('start_time');
$table->dateTime('end_time');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('events');
}
};
型
1条答案
按热度按时间2eafrhcq1#
你传递的是一个数据数组的数组,而不是一个数据数组,这将起作用:
字符串
你的代码是这样做的:
型
你的数据是这样的:
型
但你希望它是这样的:
型
因此,确实缺少了
name
。这也是user_id
是在尝试的查询中唯一完成的值(检查错误),但所有其他值都缺少的方式。