Search code examples
phplaravellaravel-livewire

Display error from custom Laravel 9 public property


I was able to get a solution to my initial error on this thread, but my new issue, with the same code, is its not providing an on-page error if validation fails, it throws a 500 error (with APP_DUBUG set to false), but when APP_DEBUG is set to true, I get an error page with a ...Integrity constraint violation: 1062 Duplicate entry....

What I am trying to sort out is how to get an error message to appear inside @error

Workorders/Edit.php

...
public function cloneWorkorder($id)
{

    $this->validate([
        'new_workorder_number' => 'required|unique:workorders,id|min:4',
    ]);

    //dd($this->new_workorder_number);
    $startingInvoiceNumber = 109000;
    $record = Workorder::find($id);
    $count = count(Workorder::withTrashed()->get());
    $wo = $startingInvoiceNumber+$count;

    $gen = Gentype::where('genable_id', $record->id)->where('genable_type', 'App\Models\Workorder')->get();
    $billto = $gen->where('generator_type', 'Bill To')->pluck('generator_id')[0];
    $generator = $gen->where('generator_type', 'Generator')->pluck('generator_id')[0];
    $b = Generator::find($billto);
    $g = Generator::find($generator);

    if(count($gen) < 2) {
        session()->flash('failed-message', 'You need both a Billto and Generator in order to clone this workorder');
        return redirect()->route('workorder.edit', $record->id);

    } else {

        Workorder::create([
            'workorder_number' => $this->new_workorder_number,
            'workorder_date' => date('Y-m-d'),
            'workorder_invoice_number' => $startingInvoiceNumber + $count,
            'site_contact_name' => $record->site_contact_name,
            'site_contact_email' => $record->site_contact_email,
            'site_contact_phone' => $record->site_contact_phone,
            'office' => $record->office,
            'creator' => Auth::user()->name,
            'department' => Auth::user()->department,
        ]);

        $latestWorkorder = Workorder::latest('id')->first()->id;
        $newWorkorder = Workorder::find($latestWorkorder);
        //dd($newWorkorder);

        Gentype::create([
            'generator_id' => $b->id,
            'generator_type' => 'Bill To',
            'genable_id' => $newWorkorder->id,
            'genable_type' => 'App\Models\Workorder',
        ]);

        Gentype::create([
            'generator_id' => $g->id,
            'generator_type' => 'Generator',
            'genable_id' => $newWorkorder->id,
            'genable_type' => 'App\Models\Workorder',
        ]);

        $newWorkorder->update([
            'static_billto' => $b->generator_name,
            'static_generator' => $g->generator_name
        ]);

    }

    return redirect()->route('workorder.edit', $newWorkorder->id);


}
...

edit.blade.php

...
<div class="flex-1 mr-2">
        <input id="new_workorder_number"
               wire:model.defer="new_workorder_number"
               placeholder="New Work Order Number">
        @error('new_workorder_number')
            <span class="mt-2 text-sm text-red-600">{{ $message }}</span>
        @enderror
</div>
...

error

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '447747' for key 'workorders.workorders_workorder_number_unique'

Solution

  • The problem comes from workorder_number because it should be unique so to add validation for this column all you need is to fix the validation as below

    $this->validate([
      'new_workorder_number' => 'required|unique:workorders,workorder_number|min:4',
    ]);