TC
Agregação com TDBUniqueSearch
Pessoal tenho um cenário aonde tenho tres tabelas, sendo elas: fornecedor,conta_a_pagar e uma terceira tabela conta_a_pagar_fornecedor, acontece que eu gostaria de usar o TDBUniqueSearch para selecionar o Fornecedor. estou tentando mas com os exemplos que consegui do adianti não consigo gravar na tabela de relacionamento usando TDBUniqueSearch
*observação : da forma que está funciona apenas se eu usar TDBCheckgroup ou TDBMultifiel, porém não atende o meu caso.
os metodos na model estão assim:
public function clearparts()
{
$this->fornecedores = array();
}
public function addFornecedor(Fornecedor $object )
{
$this->fornecedores[] = $object;
}
public function getFornecedores() {
return $this->fornecedores;
}
public function load($id)
{
$this->fornecedores = parent::loadAggregate('Fornecedor', 'ContaAPagarFornecedor', 'conta_a_pagar_id', 'fornecedor_id', $id);
return parent::load($id);
}
public function store()
{
parent::store();
//Relacionamento do tipo agregação
parent::saveAggregate('ContaAPagarFornecedor', 'conta_a_pagar_id', 'fornecedor_id', $this->id, $this->fornecedores);
}
//////no controller estão assim:
$fornecedor_id = new TDBUniqueSearch('fornecedor_id','meubanco', 'Fornecedor','id','identificacao'); //se colocar TDBCheckgroup então grava na tabela de relacioanmento
$this->form->addFields([new TLabel('Forncedor:')],[$fornecedor_id]);
public function onSave($param = null)
{
try
{
TTransaction::open('meubanco');
$this->form->validate();
$object = new ContaAPagar;
$data = $this->form->getData();
$object->fromArray( (array) $data);
if ( !empty($param['fornecedor_id']) )
{
foreach ($param['fornecedor_id'] as $fornecedor_id)
{
// add fornecedor para a conta
$object->addFornecedor(new Fornecedor($fornecedor_id));
}
}
$object->store();
$data->id = $object->id;
$this->form->setData($data);
TTransaction::close();
new TMessage('info', AdiantiCoreTranslator::translate('Record saved'));
}
catch (Exception $e)
{
new TMessage('error', $e->getMessage());
$this->form->setData( $this->form->getData() );
TTransaction::rollback();
}
}
*observação : da forma que está funciona apenas se eu usar TDBCheckgroup ou TDBMultifiel, porém não atende o meu caso.
os metodos na model estão assim:
public function clearparts()
{
$this->fornecedores = array();
}
public function addFornecedor(Fornecedor $object )
{
$this->fornecedores[] = $object;
}
public function getFornecedores() {
return $this->fornecedores;
}
public function load($id)
{
$this->fornecedores = parent::loadAggregate('Fornecedor', 'ContaAPagarFornecedor', 'conta_a_pagar_id', 'fornecedor_id', $id);
return parent::load($id);
}
public function store()
{
parent::store();
//Relacionamento do tipo agregação
parent::saveAggregate('ContaAPagarFornecedor', 'conta_a_pagar_id', 'fornecedor_id', $this->id, $this->fornecedores);
}
//////no controller estão assim:
$fornecedor_id = new TDBUniqueSearch('fornecedor_id','meubanco', 'Fornecedor','id','identificacao'); //se colocar TDBCheckgroup então grava na tabela de relacioanmento
$this->form->addFields([new TLabel('Forncedor:')],[$fornecedor_id]);
public function onSave($param = null)
{
try
{
TTransaction::open('meubanco');
$this->form->validate();
$object = new ContaAPagar;
$data = $this->form->getData();
$object->fromArray( (array) $data);
if ( !empty($param['fornecedor_id']) )
{
foreach ($param['fornecedor_id'] as $fornecedor_id)
{
// add fornecedor para a conta
$object->addFornecedor(new Fornecedor($fornecedor_id));
}
}
$object->store();
$data->id = $object->id;
$this->form->setData($data);
TTransaction::close();
new TMessage('info', AdiantiCoreTranslator::translate('Record saved'));
}
catch (Exception $e)
{
new TMessage('error', $e->getMessage());
$this->form->setData( $this->form->getData() );
TTransaction::rollback();
}
}
deixa o seu onSave assim
public function onSave()
{
try
{
TTransaction::open('hazaq_erp');
$this->form->validate();
$object = new ContaAPagar;
$data = $this->form->getData();
$object->fromArray( (array) $data);
if ( !empty($data->fornecedor_id) )
{
foreach ($data->fornecedor_id as $fornecedor_id)
{
// add fornecedor para a conta
$object->addFornecedor(new Fornecedor($fornecedor_id));
}
$object->store();
$data->id = $object->id;
$this->form->setData($data);
TTransaction::close();
new TMessage('info', AdiantiCoreTranslator::translate('Record saved'));
}
catch (Exception $e)
{
new TMessage('error', $e->getMessage());
$this->form->setData( $this->form->getData() );
TTransaction::rollback();
}
}