Conheça as melhorias da versão 8.0, 8.1, 8.2!
Clique aqui para saber mais
Gravar usando TDBMultiSearch Olá! Amigos, não consigo salvar o itens selecionados no campo abaixo. É a primeira vez que uso o componente TDBMultiSearch. $relacao_itens = new TDBMultiSearch('relacao_itens', 'cnn', 'Tbitens', 'id', 'nome'); Desde já, obrigado!...
CN
Gravar usando TDBMultiSearch  
Olá!

Amigos, não consigo salvar o itens selecionados no campo abaixo.
É a primeira vez que uso o componente TDBMultiSearch.

$relacao_itens = new TDBMultiSearch('relacao_itens', 'cnn', 'Tbitens', 'id', 'nome');

Desde já, obrigado!

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (8)


MG

Este componente retorna um array.
Onde vc pretende gravá-lo?
Num único campo ou em uma tabela?
CN

Único campo.
MG

Sugiro utilizar
foreach


Por exemplo
 
  1. <?php
  2. public function onSave($param)
  3. {
  4. ...
  5. $data = $this->form->getData();
  6. $campo = '';
  7. foreach($data->relacao_itens as $key => $item) {
  8. $campo .= $item . ',';
  9. }
  10. $obj->campo = $campo;
  11. ...
  12. }
  13. ?>
MG

Ou melhor ainda, usar implode();

$campo = implode("", $data->relacao_itens);
CN

Boa tarde Marcelo!

Está gravando no campo dentro da base de dados!

Abaixo do formulário tem um datagrid. Ao clicar em um dos registros, aparece o erro:

Warning: Invalid argument supplied for foreach() in C:wamp64wwwrmslibadiantiwidgetwrapperTDBMultiSearch.php on line 161

Pergunta: Para EDITAR, é preciso tratar novamente o conteúdo desse componente?
MG

Sim, você precisar transformar o campo em array.
Use agora o explode();
 
  1. <?php
  2. $relacao_itens = explode(",",$banco_dados->campo);
  3. ?>
CN

Bom dia Marcelo!
Desculpe pela minha ignorância! Não sei como e onde modificar o código, por isso, segue o mesmo segue abaixo.
Antecipadamente, obrigado!

public function onEdit( $param )
{
try
{
if (isset($param['key']))
{
$key = $param['key']; // get the parameter $key
TTransaction::open('cnn'); // open a transaction
$object = new Tbatendimentos($key); // instantiates the Active Record
$this->form->setData($object); // fill the form
TTransaction::close(); // close the transaction
}
else
{
$this->form->clear(TRUE);
}
}
catch (Exception $e) // in case of exception
{
new TMessage('error', $e->getMessage()); // shows the exception error message
TTransaction::rollback(); // undo all pending operations
}
}
MG

Vamos lá:
Primeiro o objeto que será retornado ao forma, os nomes dos campos devem ser os mesmos.
Partindo do pressuposto que o campo se chama "relacao_items", seri assim

 
  1. <?php
  2. public function onEdit($param)
  3. {
  4. try {
  5. ...
  6. $key = $param['key'];
  7. $object = new Tbatendimentos($key);
  8. $object->relacao_items = explode(",",$object->relacao_item);
  9. $this->form->setData($object);
  10. ...
  11. } catch (Exception $e) {
  12. ...
  13. }
  14. }
  15. ?>