1
resposta

[Projeto] Gostaria de ajuda para salvar uma lista de ocorrências em cada contrato, através da chave estrangeira.

Gostaria de saber como posso criar uma lista de ocorrências para cada contrato. Está aparecendo este erro: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'contract_id' cannot be null. Parece que a chave primária de contratos não está sendo identificada.

Segue o código do Controller, Create.Ocorrencia,Rotas e Model de Ocorrencia abaixo:

Controller <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request; use App\Models\Contract; use App\Models\Ocorrencia;

class OcorrenciaController extends Controller { /**

 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
public function index(Request $request, Contract $contratos)
{


    $ocorrencias=Ocorrencia::with('contratos')->get();


    return view('contratos.ocorrencias.index')->with('ocorrencias', $ocorrencias)->with('contratos', $contratos);
}

/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create($id)
{   

    $contratos = Contract::where('id', $id)->first();


    $ocorrencias = Ocorrencia::where('id'); 


    return view('contratos.ocorrencias.create', compact('contratos', 'ocorrencias'));
}

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request, Contract $contratos, Ocorrencia $ocorrencias)
{

    $ocorrencias = new Ocorrencia;
    $ocorrencias->lista = $request->lista;
    $ocorrencias->contract_id = $request->contract_id;
    $ocorrencias->save();




       return redirect()->route('ocorrencias.index', $contratos->id);

}

Create.Ocorrencia

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif



<form action="{{ route('ocorrencias.store') }}" method="post">

    @csrf


  <div class="row mb-3">



        <div class="col-8">
            <label for="lista" class="form-label">Ocorrência:</label>
            <input type="text" autofocus id="lista" name="lista" class="form-control">
        </div>






                <button type="submit" class="btn btn-primary">Adicionar</button>


</form>

{{--<a href="{{ route('ocorrencias.index', 'id', $contratos->id) }}" class="btn btn-secondary blue darken-4 my-2">Voltar</a>--}}

Rotas

 //Rotas Ocorrências dos Contratos

Route::get('/contratos/{id}/ocorrencias',[ OcorrenciaController::class, 'index'])->name('ocorrencias.index');

Route::get('/contratos/ocorrencias/create{id}',[ OcorrenciaController::class, 'create'])->name('ocorrencias.create');

Route::post('/contratos/ocorrencias/salvar',[ OcorrenciaController::class, 'store'])->name('ocorrencias.store');

Models

<?php

namespace App\Models;

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

class Ocorrencia extends Model { use HasFactory;

protected $fillable = ['contract_id', 'lista'];

public function contract(){
    return $this->belongsTo(Contract::class);
}

}

1 resposta

Olá Vini, tudo certo? Poderia mandar um print da $request para vermos como os dados estão sendo passados? (pode ser um print ou um var_dump), creio que na request esteja sendo passado como parametro "id" ao invés de "contract_id"

Espero ter ajudado!