Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Preciso cadastrar uma venda com vários produtos, são duas dúvidas, utilizando o cakePHP, como eu faço para adicionar o ID da venda no produto no momento da requisição?
Dúvida 2, serão vários grupos de itens, com o "ID do produto" e o "Preço do produto", como fazer para o CakePHP salvar todos eles em linhas diferentes, ele salva somente o último produto cadastrado.
Resumindo, a venda é cadastrada na tabela Sale e os produtos da venda na tabela Item, onde serão vários com o ID da Venda, ID do Produto e o Preço do produto.
Esse é a parte do formulário, nos quais se repetem dependendo da vontade do usuário/vendedor, pode ser somente 1 ou até mesmo 100.
<?php
echo $this->Form->input('Item.product_id', array(
'type' => 'select',
'label' => false, 'div' => false,
'div' => false,
'empty' => true,
'options' => $products,
'class' => 'select2 form-control',
));
?>
<?php echo $this->Form->input('Item.amount', array(
'placeholder' => '0,00', 'label' => false, 'div' => false,
'class' => 'form-control')); ?>
$this->request->data['Item']['sale_id'] = (COMO PEGAR?)
$data[] = $this->request->data;
$this->Item->saveAll($data);$Model->saveMany($data);
Como que eu formo uma variável com o meu Model e como pegar a array pro $data? O ID deu certo, pegou o ID da venda após o cadastro!
Fiz assim, mas ficou igual, cadastrando somente o útlimo
$data[] = $this->request->data['Item'];
$this->Item->saveMany($data);Poste um debug($data);
Array ( [0] => Array ( [product_id] => 4 [amount] => 1 [sale_id] => 18 ) )
Apenas um item na array
>
Array ( [0] => Array ( [product_id] => 4 [amount] => 1 [sale_id] => 18 ) )
Apenas um item na array
Esqueci de digitar pra você debugar assim também:
debug ($this->request->data);
debug ($this->request->data['Item');Array ( [product_id] => 4 [amount] => 89 [sale_id] => 20 )
Array ( [Sale] => Array ( [invoice] => true [cliente_id] => [conditional] => 0 [payment] => 0 [amount] => 3 [payed] => 3 [portion] => 1 [predated] => [status] => 1 [user_id] => 1 ) [Item] => Array ( [product_id] => 4 [amount] => 89 [sale_id] => 21 ) [Register] => Array ( [amount] => 3 [type_id] => 4 [date] => 2016-05-16 20:17:42 ) )No caso você está enviando apenas um mesmo.
Para enviar vários os inputs devem estar no formato:
<input name="[Model][nomeInput][]" value="produto 1" />
<input name="[Model][nomeInput][]" value="produto 2" />
<input name="[Model][nomeInput][]" value="produto 3" />O que eu devo colocar na terceira "casa"?
Pois digamos que o meu está assim:
<input name="[Item][product_id]" value="produto 1" />
<input name="[Item][amount]" value="200,00" />
<input name="[Item][product_id]" value="produto 2" />
<input name="[Item][amount]" value="350,00" />
<input name="[Item][product_id]" value="produto 3" />
<input name="[Item][amount]" value="99,00" />Você precisará gerar os inputs mais ou menos assim. (acho o método clone do jquery resolve)
echo $this->Form->input('', array('type' =>'text','label' => 'produto1', 'name' => 'data[user][0][produto]'));
//<input name="data[user][0][produto]" type="text" id="User">
echo $this->Form->input('', array('type' =>'text','label' => 'valor produto1 ', 'name' => 'data[user][0][amount]'));
//<input name="data[user][0][amount]" type="text" id="User">
echo $this->Form->input('', array('type' =>'text','label' => 'produto2', 'name' => 'data[user][1][produto]'));
//<input name="data[user][1][produto]" type="text" id="User">
echo $this->Form->input('', array('type' =>'text','label' => 'valor produto2', 'name' => 'data[user][1][amount]'));
//<input name="data[user][1][amount]" type="text" id="User">
Fiz um code meio tosco pra ver se ajudo. Clica em Testar array de inputs , preencha os campos e submete o form.
Desse modo eu consegui passar todos os valor na array $this->request->data['Item]
Array ( [0] => Array ( [product_id] => 2 [amount] => 1 ) [1] => Array ( [product_id] => 3 [amount] => 1 ) [sale_id] => 3 )
No banco de dados, como saveMany, ele salva 2 linhas, porém com o product_id, amount e createad zerados.
Se eu tirar o [] do $data[], ele salva normal, mas sem o sale_id.
O saveMany está assim no Controller
$this->request->data['Item']['sale_id'] = $this->Sale->id;
$data[] = $this->request->data['Item'];
$this->Item->saveMany($data);
Dúvida 1.
Para recuperar o id após gravar no banco, você pode utilizar:
Dúvida 2.Dá uma lida aqui http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-savemany-array-data-null-array-options-array