MM
Formulario Mestre Detalhe
Boa noite, pessoal, estou com um problema.
tenho um formulário mestre detalhe, para cadastro de colaboradores e seus respectivos contatos, porém não consigo gravar no banco de dados, aparece esse erro : Fatal error: Uncaught TypeError: Argument 1 passed to Colaborador::addColaboradorContato() must be an instance of ColaboradorContato, instance of stdClass given.
Segue o meu código abaixo:
Controller
e a model está desse Jeito
Aguardo vossa ajuda
tenho um formulário mestre detalhe, para cadastro de colaboradores e seus respectivos contatos, porém não consigo gravar no banco de dados, aparece esse erro : Fatal error: Uncaught TypeError: Argument 1 passed to Colaborador::addColaboradorContato() must be an instance of ColaboradorContato, instance of stdClass given.
Segue o meu código abaixo:
Controller
- <?php
- public function onSave()
- {
- try{
- TTransaction::open('database'); // abra a conexão
- // Obtem os dados do formulário como um active record Record Colaborator
- $colaborador = $this->form->getData('Colaborador');
- //echo '<pre>';var_dump($colaborador);die;
-
- if($colaborador->contatos){
- foreach($colaborador->contatos as $contato)
- {
- //var_dump($contato);die;
- $colaborador->addColaboradorContato($contato);
- }
- }
-
- if($colaborador->salario_base_colaborador){
- foreach($colaborador->salario_base_colaborador as $salario)
- {
- $colaborador->addSalarioBaseColaborador($salario);
- }
- }
-
-
- if($colaborador->proventos){
- foreach($colaborador->proventos as $provento)
- {
- $colaborador->addProvento($provento);
- }
- }
- $colaborador->cpf = preg_replace('/[^0-9]/','',$colaborador->cpf);
- $colaborador->cep = preg_replace('/[^0-9]/','',$colaborador->cep);
- $colaborador->store();
- $this->form->setData($colaborador);
- new TMessage('info', 'Dados cadastrados com sucesso');
- }catch(Exception $e){
- new TMessage('info', $e->getMessage());
- }
-
-
-
- }
- ?>
e a model está desse Jeito
- <?php
- class Colaborador extends TRecord
- {
- const TABLENAME = 'rh.colaborador';
- const PRIMARYKEY= 'id';
- const IDPOLICY = 'max'; // {max, serial}
-
-
- private $grau_instrucao;
- private $proventos;
- private $salario_base_colaboradors;
- private $colaborador_contatos;
- /**
- * Constructor method
- */
- public function __construct($id = NULL, $callObjectLoad = TRUE)
- {
- parent::__construct($id, $callObjectLoad);
- /** Atributos **/
- }
-
- /**
- * Method set_grau_instrucao
- * Sample of usage: $colaborador->grau_instrucao = $object;
- * @param $object Instance of GrauInstrucao
- */
- public function set_grau_instrucao(GrauInstrucao $object)
- {
- $this->grau_instrucao = $object;
- $this->id_grau_instrucao = $object->id;
- }
-
- /**
- * Method get_grau_instrucao
- * Sample of usage: $colaborador->grau_instrucao->attribute;
- * @returns GrauInstrucao instance
- */
- public function get_grau_instrucao()
- {
- // loads the associated object
- if (empty($this->grau_instrucao))
- $this->grau_instrucao = new GrauInstrucao($this->id_grau_instrucao);
-
- // returns the associated object
- return $this->grau_instrucao;
- }
-
-
- /**
- * Method addProvento
- * Add a Provento to the Colaborador
- * @param $object Instance of Provento
- */
- public function addProvento(Provento $object)
- {
- $this->proventos[] = $object;
- }
-
- /**
- * Method getProventos
- * Return the Colaborador' Provento's
- * @return Collection of Provento
- */
- public function getProventos()
- {
- return $this->proventos;
- }
-
- /**
- * Method addSalarioBaseColaborador
- * Add a SalarioBaseColaborador to the Colaborador
- * @param $object Instance of SalarioBaseColaborador
- */
- public function addSalarioBaseColaborador(SalarioBaseColaborador $object)
- {
- $this->salario_base_colaboradors[] = $object;
- }
-
- /**
- * Method getSalarioBaseColaboradors
- * Return the Colaborador' SalarioBaseColaborador's
- * @return Collection of SalarioBaseColaborador
- */
- public function getSalarioBaseColaboradors()
- {
- return $this->salario_base_colaboradors;
- }
-
- /**
- * Method addColaboradorContato
- * Add a ColaboradorContato to the Colaborador
- * @param $object Instance of ColaboradorContato
- */
- public function addColaboradorContato(ColaboradorContato $object)
- {
- $this->colaborador_contatos[] = $object;
- }
-
- /**
- * Method getColaboradorContatos
- * Return the Colaborador' ColaboradorContato's
- * @return Collection of ColaboradorContato
- */
- public function getColaboradorContatos()
- {
- return $this->colaborador_contatos;
- }
- /**
- * Reset aggregates
- */
- public function clearParts()
- {
- $this->proventos = array();
- $this->salario_base_colaboradors = array();
- $this->colaborador_contatos = array();
- }
- /**
- * Load the object and its aggregates
- * @param $id object ID
- */
- public function load($id)
- {
-
- // load the related Provento objects
- $repository = new TRepository('Provento');
- $criteria = new TCriteria;
- $criteria->add(new TFilter('id_colaborador', '=', $id));
- $this->proventos = $repository->load($criteria);
-
- // load the related SalarioBaseColaborador objects
- $repository = new TRepository('SalarioBaseColaborador');
- $criteria = new TCriteria;
- $criteria->add(new TFilter('id_colaborador', '=', $id));
- $this->salario_base_colaboradors = $repository->load($criteria);
-
- // load the related ColaboradorContato objects
- $repository = new TRepository('ColaboradorContato');
- $criteria = new TCriteria;
- $criteria->add(new TFilter('id_colaborador', '=', $id));
- $this->colaborador_contatos = $repository->load($criteria);
-
- // load the object itself
- return parent::load($id);
- }
- /**
- * Store the object and its aggregates
- */
- public function store()
- {
- // store the object itself
- parent::store();
-
- // delete the related Provento objects
- $criteria = new TCriteria;
- $criteria->add(new TFilter('id_colaborador', '=', $this->id));
- $repository = new TRepository('Provento');
- $repository->delete($criteria);
- // store the related Provento objects
- if ($this->proventos)
- {
- foreach ($this->proventos as $provento)
- {
- unset($provento->id);
- $provento->id_colaborador = $this->id;
- $provento->store();
- }
- }
- // delete the related SalarioBaseColaborador objects
- $criteria = new TCriteria;
- $criteria->add(new TFilter('id_colaborador', '=', $this->id));
- $repository = new TRepository('SalarioBaseColaborador');
- $repository->delete($criteria);
- // store the related SalarioBaseColaborador objects
- if ($this->salario_base_colaboradors)
- {
- foreach ($this->salario_base_colaboradors as $salario_base_colaborador)
- {
- unset($salario_base_colaborador->id);
- $salario_base_colaborador->id_colaborador = $this->id;
- $salario_base_colaborador->store();
- }
- }
- // delete the related ColaboradorContato objects
- $criteria = new TCriteria;
- $criteria->add(new TFilter('id_colaborador', '=', $this->id));
- $repository = new TRepository('ColaboradorContato');
- $repository->delete($criteria);
- // store the related ColaboradorContato objects
- if ($this->colaborador_contatos)
- {
- foreach ($this->colaborador_contatos as $colaborador_contato)
- {
- unset($colaborador_contato->id);
- $colaborador_contato->id_colaborador = $this->id;
- $colaborador_contato->store();
- }
- }
- }
- /**
- * Delete the object and its aggregates
- * @param $id object ID
- */
- public function delete($id = NULL)
- {
- $id = isset($id) ? $id : $this->id;
- // delete the related Provento objects
- $repository = new TRepository('Provento');
- $criteria = new TCriteria;
- $criteria->add(new TFilter('id_colaborador', '=', $id));
- $repository->delete($criteria);
-
- // delete the related SalarioBaseColaborador objects
- $repository = new TRepository('SalarioBaseColaborador');
- $criteria = new TCriteria;
- $criteria->add(new TFilter('id_colaborador', '=', $id));
- $repository->delete($criteria);
-
- // delete the related ColaboradorContato objects
- $repository = new TRepository('ColaboradorContato');
- $criteria = new TCriteria;
- $criteria->add(new TFilter('id_colaborador', '=', $id));
- $repository->delete($criteria);
-
-
- // delete the object itself
- parent::delete($id);
- }
- static public function newFromLogin($login)
- {
- $members = Colaborador::where('login', '=', $login)->load();
- if (isset($members[0]))
- {
- return $members[0];
- }
- }
-
- public function getProjectsList()
- {
-
- }
- }
- ?>
Aguardo vossa ajuda
Mauro, esse não parece ser o código de master/detail gerado pelo Studio.
Você está usando a TMultifield para adicionar os contatos?
Grande Nataniel,
desde já agradeço pela disponibilidade. o fromulário gerei pelo estudio porém tem o contato o provento e mais outro detalhe ou seja são 3 detalhoes diferentes.
segue o controller do formulário completo.
A multifield tem a função setClass que serve para informar qual classe(model) deve ser retornada.
Obrigado meu carro, o erro parou, só que não grava.
Você faz ideia do que esteja acontecendo?
Opa rodou aqui. vou fazer mais alguns testes. caso não aconteça nenhum outro erro, dou este tópico como encerrado. A principio Obrigado Nataniel.