Bom, estou com uma dificuldade, o método for não funciona dentro do meu controller… segue o código a baixo.
public function store(Request $request){
$validator = $this->validarProduto($request);
if($validator->fails()){
return redirect()->back()->withErrors($validator->errors());
}
$dados = [
'descricao' => $request->descricao,
'insumo_id' => $request->insumo_id,
'quantidade' => $request->quantidade,
];
for ($i=0; $i < count($dados['insumo_id']); $i++) {
$produto = Produto::create($dados);
$produto = Produto::find($produto->id);
$produto->insumos()->attach($dados['insumo_id'], ['quantidade' => $dados['quantidade'][$i]]);
}
$redirect = redirect()->route('produto.index');
return $redirect->with('success', 'produto adicionado com sucesso!!!');
}
Dragoon
Janeiro 8, 2019, 11:33pm
#2
Primeiro não funciona porque aparece algum erro?
Segundo o $dados['insumo_id']
é um array?
Para ter uma resposta precisa dos modelos, da View também .
$dados[‘insumo_id’ é um array, o loop não incrementa.
Vou postar aqui como tá o meu projeto.
public function store(Request $request){
$validator = $this->validarProduto($request);
if($validator->fails()){
return redirect()->back()->withErrors($validator->errors());
}
$dados = [
'descricao' => $request->descricao,
'insumo_id' => $request->insumo_id,
'quantidade' => $request->quantidade,
];
for ($i=0; $i < count($dados['insumo_id']); $i++) {
$produto = Produto::create($dados);
$produto = Produto::find($produto->id);
$produto->insumos()->attach($dados['insumo_id'], ['quantidade' => $dados['quantidade'][$i]]);
}
$redirect = redirect()->route('produto.index');
return $redirect->with('success', 'produto adicionado com sucesso!!!');
}
identar texto pre-formatado em 1 espaços <?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use App\Model\Insumo;
class Produto extends Model
{
protected $fillable = [
'descricao',
];
public $timestamps = false;
public function insumos(){
return $this->belongsToMany("App\Model\Insumo", 'produto_insumo','produto_id','insumo_id')->withPivot(['quantidade']);
}
}
identar texto pre-formatado em 4 espaços <?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use App\Model\Produto;
class Insumo extends Model
{
protected $fillable = [
'descricao',
'unidade',
'valor_unit',
];
public function produtos(){
return $this->belongsToMany("App\Model\Produto", 'produto_insumo','insumo_id','produto_id')->withPivot(['quantidade']);
}
}
identar @extends('adminlte::page')
@section (‘title’, ‘Locktec - Proposta’)
@section (‘content_header’)
@stop
@section (‘content’)
Adicionar novo produto
</div>
<div class="box-body">
<div class="col-lg-4 col-xs-12">
@foreach($errors->all() as $error)
<div class="callout callout-danger">
{{ $error }}
</div>
@endforeach
<form action="" method ="POST" id="form_prepare">
<fieldset>
<div class="form-group">
<label for="descircao">Descrição</label>
<input type="text" name="descricao" id="descricao" placeholder="Insira a descrição do produto" class="form-control" required>
</div>
<div class="form-group">
<label for="insumo_id[]">Insumo</label>
<select class="form-control" name="insumo_id[]" required>
<option value=""> -- Selecione um insumo -- </option>
@foreach($insumos as $insumo)
<option value="{{$insumo->id}}">{{$insumo->descricao}}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="quantidade">Quantidade</label>
<input type="number" name="quantidade[]" id="quantidade[]" placeholder="Insira a quantidade desejada" class="form-control" required>
</div>
<hr>
<div class="form-group">
<button type="submit" class="btn btn-primary">Adicionar</button>
</fieldset>
</form>
<hr>
<table id="grid" class= "table-responsive table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Produto</th>
<th>Insumo Descr.</th>
<th>Quantidade</th>
</tr>
</thead>
<tbody>
</tbody>
</table><!-- /grid -->
<form action="{{route('produto.store')}}" method="POST" id="form_insert">
<fieldset style="display: none;"></fieldset>
{!! csrf_field() !!}
<div class="form-group">
<button type="submit" class="btn btn-success">Cadastrar</button>
<div>
</form><!-- /form_insert -->
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){
$('#form_prepare').submit(function(){
var $this = $( this );
var descricao = $this.find("input[name='descricao']").val(),
insumo_id = $this.find("select[name='insumo_id[]']").val(),
quantidade = $this.find("input[name='quantidade[]']").val();
var tr = '<tr>'+
'<td>'+descricao+'</td>'+
'<td>'+insumo_id+'</td>'+
'<td>'+quantidade+'</td>'+
'</tr>'
$('#grid').find('tbody').append( tr );
var hiddens = '<input type="hidden" name="descricao" value="'+descricao+'" />'+
'<input type="hidden" name="insumo_id[]" value="'+insumo_id+'" />'+
'<input type="hidden" name="quantidade[]" value="'+quantidade+'" />';
$('#form_insert').find('fieldset').append( hiddens );
return false;
});
});
@stop
Aproveitando o tópico, para que serve : ->
é um símbolo de atribuição?
Mike
Janeiro 9, 2019, 10:38am
#10
A seta (arrow) serve para você acessar os atributos/métodos da classe
1 curtida
Amigos, consegui resolver o problema!!!