How to save a foreign key in laravel 5.3?

1

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

Product Controller

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 giving me the following error:

  

QueryException in Connection.php line 770:   SQLSTATE [23000]: Integrity constraint violation: 1048 Column 'categs_id' can not be null (SQL: insert into produtos ( nome , descricao , categs_id , updated_at led, 2017-07-30 00:53:32, 2017-07-30 00:53:32))

    
asked by anonymous 30.07.2017 / 03:20

1 answer

1

Change $request->id to $request->nome_cat , name that is set in select of your form : ( <select id="nome_cat" name="nome_cat" class="form-control"> ), example p>

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!');
}
    
30.07.2017 / 03:58