Home > Software design >  Laravel table update issue General error: 1364 Field 'start_date' doesn't have a defa
Laravel table update issue General error: 1364 Field 'start_date' doesn't have a defa

Time:10-03

hope you are safe and doing well. I am facing an issue with laravel relational table. I have three table, USER, CLIENT ,ORDER and CAR_PARKING. Now Client is related to user and ORDER is related to both Client and USER while CAR_PARKING related to ORDER only. What i am facing like issue is that when I am trying to update table ORDER it says #General error: 1364 Field 'start_date' doesn't have a default value# Below are my different table models and controller

public function updateOrderCarParking(Request $request,  $id)
    {
        if (Auth::check()) {
            $carParkingData = $request->only('removed', 'removed_date');
            $validateCarParking = Validator::make($carParkingData, [
                'removed' => 'required|boolean',
                'removed_date' => 'nullable'
            ]);
            
            if ($validateCarParking->fails()) {
                return response()->json($validateCarParking->errors(), 422);
            }
            $orderData = $request->only('paid', 'amount_paid', 'overdue', 'currency', 'user_id');

            $validateOrder = Validator::make($orderData, [
                'amount_paid' => 'required|regex:/^\d* (\.\d{1,2})?$/',
                'currency' => [
                    'required',
                    Rule::in(['USD', 'CAD'])
                ],
                "paid" => "required|boolean",
                'overdue' => 'regex:/^\d* (\.\d{1,2})?$/'
            ]);
            if ($validateOrder->fails()) {
                return response()->json($validateOrder->errors(), 422);
            }

            $updateCarParking = CarParking::updateOrCreate([
                'removed' => $request->removed,
                'removed_date' => $request->removed_date,
            ]);
            $order = Order::find($id);
            $order->carParkings()->save($updateCarParking);

            $updateOrder = Order::find($id);
            $updateOrder->amount_paid = $request->amount_paid;
            $updateOrder->paid = $request->paid;
            $updateOrder->currency = $request->currency;
            $updateOrder->overdue = $request->overdue;
            $updateOrder->user_id = Auth::user()->id;

            $updateOrder->save();

            if ($order && $updateOrder) {
                return response()->json([
                    'success' => true,
                    'message' => 'Order updated successfully',
                    'data' => $order
                ], Response::HTTP_OK);
            }
        } else {
            return response()->json([
                'success' => false,
                'message' => 'Can not update',
            ], Response::HTTP_UNAUTHORIZED);
        }
    }

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
    use HasFactory;
    protected $fillable = ['order_type', 'amount_paid','client_id', 'user_id', 'price', 'currency', 'paid', 'overdue'];
    public function user()
    {
        return $this->belongsTo(User::class);
    }
    public function client()
    {
        return $this->belongsTo(Client::class);
    }

    public function carParkings(){
        return $this->hasMany(CarScrap::class);
    }
    
}

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class CarParking extends Model
{
    use HasFactory;
    protected $fillable = ['start_date', 'end_of_free_charge', 'order_id', 'removed', 'removed_date'];
    public function order()
    {
        return $this->belongsTo(Order::class);
    }
}


<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateOrdersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('orders', function (Blueprint $table) {
            $table->id();
            $table->decimal('price', 8, 2);
            // $table->date('start_date');
            $table->enum('order_type', ['Storage rent', 'Forklift', 'Ramp', 'Car Parking', 'Car Scrap', 'Shipping']);
            $table->enum('currency', ['USD', 'CAD']);
            $table->boolean('paid')->default('0');
            $table->decimal('amount_paid')->default(0);     
            $table->decimal('overdue')->nullable();     
            $table->foreignId('client_id')->constrained('clients')->onDelete('cascade');
            $table->foreignId('user_id')->constrained('users')->onDelete('cascade');
            $table->timestamps();
        });
        Schema::enableForeignKeyConstraints();
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('orders', function (Blueprint $table) {
            $table->dropConstrainedForeignId("client_id");
            $table->dropConstrainedForeignId("user_id");
        });
        Schema::dropIfExists('orders');
    }
}


<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateCarParkingsTable extends Migration
{
    public function up()
    {
        Schema::create('car_parkings', function (Blueprint $table) {
            $table->id();
            $table->date('start_date');
            $table->date('end_of_free_charge');            
            $table->boolean('removed')->default("0");
            $table->date('removed_date')->nullable();
            $table->timestamps();
            $table->foreignId('order_id')->constrained('orders')->onDelete('cascade');
        });
        Schema::enableForeignKeyConstraints();
    }
    public function down()
    {
        Schema::table('car_parkings', function (Blueprint $table) {
            $table->dropConstrainedForeignId("order_id");
        });
        Schema::dropIfExists('car_parkings');
    }
}

What am I doing wrong?

CodePudding user response:

Replace your existing method with this:

class CreateCarParkingsTable extends Migration
{
    public function up()
    {
        Schema::create('car_parkings', function (Blueprint $table) {
            $table->id();
            $table->date('start_date')->nullable();
            $table->date('end_of_free_charge');            
            $table->boolean('removed')->default("0");
            $table->date('removed_date')->nullable();
            $table->timestamps();
            $table->foreignId('order_id')->constrained('orders')->onDelete('cascade');
        });
        Schema::enableForeignKeyConstraints();
    }
    public function down()
    {
        Schema::table('car_parkings', function (Blueprint $table) {
            $table->dropConstrainedForeignId("order_id");
        });
        Schema::dropIfExists('car_parkings');
    }
}

If you get error for any other field then make it nullable as I had done in start_date

CodePudding user response:

Set start_date to Nullable in Database Migration.

Example:

$table->date('start_date')->nullable();
  • Related