postman Laravel:字段'name'没有默认值

9avjhtql  于 5个月前  发布在  Postman
关注(0)|答案(1)|浏览(72)

我通过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');
    }
};

2eafrhcq

2eafrhcq1#

你传递的是一个数据数组的数组,而不是一个数据数组,这将起作用:

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)
    {
       $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'nullable|string',
            'start_time' => 'required|date',
            'end_time' => 'required|date|after:start_time',
       ]);

        $event = Event::create([
            'name' => $request->name,
            'description' => $request->description,
            'start_time' => $request->start_time,
            'end_time' => $request->end_time,
            'user_id' => 1,
        ]);

        return $event;
    }
}

字符串
你的代码是这样做的:

$data = $request->validate([
    'name' => 'required|string|max:255',
    'description' => 'nullable|string',
    'start_time' => 'required|date',
    'end_time' => 'required|date|after:start_time',
]);

$event = Event::create(
    [
        $data,
        'user_id' => 1,
    ]
);


你的数据是这样的:

$data = [
    0 => [
        'name' => 'name value',
        'description' => 'description value',
        'start_time' => 'start time value',
        'end_time' => 'end time value',
    ],
    'user_id' => 1,
];


但你希望它是这样的:

$data = [
    'name' => 'name value',
    'description' => 'description value',
    'start_time' => 'start time value',
    'end_time' => 'end time value',
    'user_id' => 1,
];


因此,确实缺少了name。这也是user_id是在尝试的查询中唯一完成的值(检查错误),但所有其他值都缺少的方式。

相关问题