Laravel 5.8: Поле ошибки не имеет значения по умолчанию - PullRequest
0 голосов
/ 02 ноября 2019

Я видел похожие вопросы, но ни один из них не работает для меня . Это Transition модель

class Transition extends Model
{
 protected $fillable = ['origin_x', 'origin_y', 'destination_x', 'destination_y', 'freight_id', 'status', 'receiver_name', 'receiver_mobile', 'receiver_address'];
 protected $table = 'freight_transitions';
}

, и это код вставки

    $transition = Transition::create([
        'origin_x' => $redis['origin_x'],
        'origin_y' => $redis['origin_y'],
        'destination_x' => $redis['destination_x'],
        'destination_y' => $redis['destination_y'],
        'freight_id' => $freight->id,
        'status' => 2,
        'receiver_name' => $redis['receiver_name'],
        'receiver_mobile' => $redis['receiver_mobile'],
        'receiver_address' => $redis['receiver_address']
    ]);

Я уверен, что массив $ redis` имеет значение. Но это ошибка

Общая ошибка: 1364 Поле 'origin_x' не имеет значения по умолчанию (SQL: вставить в freight_transitions (updated_at, created_at) значения (2019-11-02 16:42:58, 2019-11-02 16:42:58))

Из того, что я вижу, Laravel не пытается вставить origin_x и другие поля вв БД. он вставляет только created_at и updated_at. У меня есть похожая модель под названием Freight, в несколько строк над этим кодом, я вставляю записи таким же образом, без ошибок. Но я не знаю, почему он вставляет только created_at и updated_at.

Я также пытался

$transition = new Transition([....]);//array of above data
$transition->save();

Он также генерирует ту же ошибку.

Это миграция

    Schema::create('freight_transitions', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('origin_x');
        $table->string('origin_y');
        $table->string('destination_x');
        $table->string('destination_y');
        $table->string('receiver_name')->nullable();
        $table->string('receiver_mobile')->nullable();
        $table->string('receiver_address')->nullable();
        $table->bigInteger('freight_id')->unsigned();
        $table->foreign('freight_id')->references('id')->on('freight_freights')->onDelete('cascade');
        $table->enum('status', ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14'])->default(1);//1: start
        $table->timestamps();
    });

и массив redis в формате json

{
"origin_x": "555",
"origin_y": "666",
"destination_x": "777",
"destination_y": "8888",
"freight_type_id": "1",
"title": null,
"description": null,
"price": 130000,
"features": "2",
"services": "2,5",
"vehicle_id": 1,
"token": "111111",
"payment_type": "3",
"user_id": 1,
"receiver_name": null,
"receiver_mobile": null,
"receiver_address": null,
"payment_status": 1,
"status": 2
}

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2019

Я попытался вставить данные следующим образом

    $transition = new Transition;
    $transition ->origin_x = $redis['origin_x'];
    $transition ->origin_y = $redis['origin_y'];
    $transition ->destination_x = $redis['destination_x'];
    $transition ->destination_y = $redis['destination_y'];
    $transition ->freight_id = $freight->id;
    $transition ->status = 2;
    $transition ->receiver_name = $redis['receiver_name'];
    $transition ->receiver_mobile = $redis['receiver_mobile'];
    $transition ->receiver_address = $redis['receiver_address'];
    $transition->save();

Несмотря на то, что это работает, но мне все еще остается вопрос, почему коды, которые я использую для множества проектов, здесь не работают: |

0 голосов
/ 02 ноября 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...