Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Ausência de id na tabela series

Bom dia, estou com um problema que visualizei na hora de exibir a flashMessage no cadastro das séries, pois sempre aparece "$serie->id = 0", estou usando o MySQL.

A mensagem aparece assim: Série 0 criada com sucesso Exemplo de série

Segue abaixo a conecxão com banco:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=banco_series
DB_USERNAME=root
DB_PASSWORD=********

O arquivo de migração:

<?php

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

class CriarTabelaSeries extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('series', function(Blueprint $table) {
            $table->string('nome');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('series');
    }
}

O controller de series:

<?php

namespace App\Http\Controllers;

use App\Models\Serie;
use Illuminate\Http\Request;

class SeriesController extends Controller
{

    public function index(Request $request) {

        $series = serie::query()
            ->orderBy('nome')
            ->get();
        $mensagem = $request->session()->get('mensagem');

    return view('series.index', compact('series','mensagem'));
}
    public function create()
    {
        return view('series.create');
    }
    public function store(Request $request)
    {
        $serie = Serie::create($request->all());
        $request->session()
            ->flash(
            'mensagem',
            "Série {$serie->id} criada com sucesso {$serie->nome}"
            );
        return redirect('/series');
    }
}

A classe:

<?php


namespace App\Models;


use Illuminate\Database\Eloquent\Model;

class Serie extends Model
{
    public $timestamps = false;
    protected $fillable = ['nome'];
   # protected $primaryKey = 'id';
}

E a parte da view.

@extends('layout')

@section('cabecalho')
    Séries
@endsection

@section('conteudo')
    @if(!empty($mensagem))
        <div class="alert alert-success">
            {{ $mensagem }}
        </div>
    @endif

    <a href="/series/criar" class="btn btn-dark mb-2">Adicionar</a>

    <ul class="list-group">
        @foreach ($series as $serie)
        <li class="list-group-item">{{$serie->nome}}</li>
        @endforeach
    </ul>

@endsection

Além disso, quando vou no MySQL workbench e peço para selecionar o dados da tabela series, não existe outra coluna que não seja nome, não possui chave primária nem nada.

2 respostas
solução!

Felipe, Que eu me lembre deste treinamento, na primeira versão desta tabela o instrutor deixa sem o campo id mesmo, isto me parece foi proposital. Mais tarde quando precisamos criar a função de excluir uma série, ele aproveita este ponto para demonstrar como utilizar a migration para alterar uma tabela que já existe, e dai, é criado o campo id. Deve estar um pouco a frente do ponto que esta agora, ou talvez deixou passar este ponto do treinamento.

Não lembro se ele apaga a migration original ou se faz uma nova migration. Olhando aqui os arquivos finais do meu treinamento, veja que minha migration contém o campo id:

class CriarTabelaSeries extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('series', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nome');
        });
    }

Se não econtrar este trecho dentro do curso, pode usar o código acima na tua migration.

sim, eu segui os passos no curso e essa "brecha" acabou se fechando. Obrigado novamente pela resposta.