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);
}
}