How to save a foreign key in Laravel 5.3?

Asked

Viewed 367 times

1

I am having trouble saving the foreign key in the database. I am working PHP, Laravel 5.3 and MySQL, below goes the code:

Controller Product

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Produtos;

class ProdutosController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $produtos = Produtos::with('categoria')->get();
        return view('produtos.index',['todosprodutos'=>$produtos]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('produtos.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $this->validate($request, [
            'nome' => 'required',
            'descricao' => 'required'
            ]);

        $produtos = new Produtos;
        $produtos->nome = $request->nome;
        $produtos->descricao = $request->descricao;
        $produtos->categs_id = $request->id;
        $produtos->save();

        return redirect('produtos')->with('message', 'Produto gravado com sucesso!');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $produtos = Produtos::find($id);
        if(!$produtos)
            {abort(404);}
        return view('produtos.details')->with('detailpage',$produtos);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $produtos = Produtos::find($id);
        if(!$produtos)
            {abort(404);}
        return view('produtos.edit')->with('detailpage',$produtos);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $this->validate($request, [
            'nome' => 'required',
            'descricao' => 'required',
        ]);

        $produtos = Produtos::find($id);
        $produtos->nome = $request->nome;
        $produtos->descricao = $request->descricao;
        $produtos->save();
        return redirect('produtos')->with('message', 'Produto actualizado com sucesso!');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $produtos = Produtos::find($id);
        $produtos->delete();
        return redirect('produtos')->with('message', 'Produto excluido com sucesso!');
    }
}

View Product.Create

@extends('novomaster')
@section('left-sidebar')
<h1>Novo Produto</h1>
<hr>
<div style="background-color: #EEE">
    <form class="" action="/produtos" method="POST">

        <select id="nome_cat" name="nome_cat" class="form-control">
            <option value="null">Selecione a Categoria</option>
            @foreach(App\categ::all() as $cat)
            <option value="{{$cat->id}}">{{$cat->nome_cat}}</option>
            @endforeach
        </select><br>


        <input class="form-control" type="text" name="nome" value="" placeholder="Nome">
        {{ ($errors->has('nome')) ? $errors->first('nome') : '' }}<br>

        <textarea class="form-control" name="descricao" rows="6" cols="40" placeholder="Descricao"></textarea>
        {{ ($errors->has('descricao')) ? $errors->first('descricao') : '' }}<br>

        <input type="hidden" name="_token" value="{{ csrf_token() }}">
        <input class="btn btn-primary" type="submit" name="name" value="Salvar">

        <a class="btn btn-primary" href="/produtos"><i class="glyphicon glyphicon-chevron-left"></i>Cancelar</a> 
    </form>
</div>  
@endsection 

You’re making the following mistake:

Queryexception in Connection.php line 770: SQLSTATE[23000]: Integrity Constraint Violation: 1048 Column 'categs_id' cannot be null (SQL: Insert into produtos (nome, descricao, categs_id, updated_at, created_at) values (TV, led, 2017-07-30 00:53:32, 2017-07-30 00:53:32))

1 answer

1


Alter $request->id for $request->nome_cat, name that is configured in select of your form: (<select id="nome_cat" name="nome_cat" class="form-control">), example:

public function store(Request $request)
{
    $this->validate($request, [
        'nome' => 'required',
        'descricao' => 'required'
        ]);

    $produtos = new Produtos;
    $produtos->nome = $request->nome;
    $produtos->descricao = $request->descricao;
    $produtos->categs_id = $request->nome_cat;
    $produtos->save();

    return redirect('produtos')->with('message', 'Produto gravado com sucesso!');
}
  • 1

    It worked! Thank you so much @Virgilionovic.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.