CS
Erro ao salvar
Estou tentando criar um form Mestre/Detalhe com dois detalhes. Na hora de cadastrar grava corretamente. Na hora de editar dá um erro de conexão. Se, ao editar, excluo os campos detalhe a gravação ocorre normalmente. Alguém consegue me dar um help?
- <?php
- /**
- * CursoForm Master/Detail
- * @author <your name here>
- */
- class CursoForm extends TPage
- {
- protected $form; // form
- protected $detail_list;
- protected $detail_Inscritos_list;
- /**
- * Page constructor
- */
- public function __construct()
- {
- parent::__construct();
- // creates the form
- $this->form = new BootstrapFormBuilder('form_Curso');
- $this->form->setFormTitle('Cadastro de Curso');
- // master fields
- $this->form->appendPage('Curso');
- $id = new TEntry('id');
- $nome = new TEntry('nome');
- $data_inicial = new TDate('data_inicial');
- $data_final = new TDate('data_final');
- $numero_horas = new TEntry('numero_horas');
- $data_cadastro = new TDate('data_cadastro');
- $conteudos = new TText('conteudos');
- $numero_vagas = new TEntry('numero_vagas');
- $data_inicial_inscricao = new TDate('data_inicial_inscricao');
- $data_final_inscricao = new TDate('data_final_inscricao');
- $local_realizacao = new TEntry('local_realizacao');
- $turno = new TEntry('turno');
- $assinatura_id = new TDBUniqueSearch('assinatura_id', 'permission', 'Assinatura', 'id', 'caminho_assinatura');
- $system_unit_id = new TDBUniqueSearch('system_unit_id', 'permission', 'SystemUnit', 'id', 'name');
- // detail Palestrantes fields
- $detail_id = new THidden('detail_id');
- $detail_data_cadastro = new TDate('detail_data_cadastro');
- $detail_numero_horas = new TEntry('detail_numero_horas');
- $detail_codigo_certificado = new TEntry('detail_codigo_certificado');
- $detail_palestrante_id = new TDBUniqueSearch('detail_palestrante_id', 'permission', 'Palestrante', 'id', 'nome');
- // detail_Inscritos fields
- $detail_Inscritos_id = new THidden('detail_Inscritos_id');
- $detail_Inscritos_data_cadastro = new TDate('detail_Inscritos_data_cadastro');
- $detail_Inscritos_codigo_certificado = new TEntry('detail_Inscritos_codigo_certificado');
- $detail_Inscritos_frequencia = new TEntry('detail_Inscritos_frequencia');
- $detail_Inscritos_segunda_via = new TEntry('detail_Inscritos_segunda_via');
- $detail_Inscritos_system_user_id = new TDBUniqueSearch('detail_Inscritos_system_user_id', 'permission', 'SystemUser', 'id', 'name');
- $detail_Inscritos_system_user_unit_id = new TDBUniqueSearch('detail_Inscritos_system_user_unit_id', 'permission', 'SystemUnit', 'id', 'name');
- if (!empty($id))
- {
- $id->setEditable(FALSE);
- }
- // master fields
- $this->form->addFields( [new TLabel('Id')], [$id] );
- $this->form->addFields( [new TLabel('Nome')], [$nome] );
- $this->form->addFields( [new TLabel('Data Inicial')], [$data_inicial] );
- $this->form->addFields( [new TLabel('Data Final')], [$data_final] );
- $this->form->addFields( [new TLabel('Numero Horas')], [$numero_horas] );
- $this->form->addFields( [new TLabel('Data Cadastro')], [$data_cadastro] );
- $this->form->addFields( [new TLabel('Conteudos')], [$conteudos] );
- $this->form->addFields( [new TLabel('Numero Vagas')], [$numero_vagas] );
- $this->form->addFields( [new TLabel('Data Inicial Inscricao')], [$data_inicial_inscricao] );
- $this->form->addFields( [new TLabel('Data Final Inscricao')], [$data_final_inscricao] );
- $this->form->addFields( [new TLabel('Local Realizacao')], [$local_realizacao] );
- $this->form->addFields( [new TLabel('Turno')], [$turno] );
- $this->form->addFields( [new TLabel('Assinatura Id')], [$assinatura_id] );
- $this->form->addFields( [new TLabel('System Unit Id')], [$system_unit_id] );
- $this->form->appendPage('Palestrantes');
- // detail fields
- // $this->form->addContent( ['<h4>Cadastro de Palestrante</h4><hr>'] );
- $this->form->addFields( [$detail_id] );
- $this->form->addFields( [new TLabel('Data Cadastro')], [$detail_data_cadastro] );
- $this->form->addFields( [new TLabel('Numero Horas')], [$detail_numero_horas] );
- $this->form->addFields( [new TLabel('Codigo Certificado')], [$detail_codigo_certificado] );
- $this->form->addFields( [new TLabel('Palestrante Id')], [$detail_palestrante_id] );
- $add = TButton::create('add', [$this, 'onSaveDetail'], 'Register', 'fa:save');
- $this->form->addFields( [], [$add] )->style = 'background: whitesmoke; padding: 5px; margin: 1px;';
- $this->detail_list = new BootstrapDatagridWrapper(new TQuickGrid);
- $this->detail_list->style = "min-width: 700px; width:100%;margin-bottom: 10px";
- $this->detail_list->setId('Curso_list');
- // items
- $this->detail_list->addQuickColumn('Data Cadastro', 'data_cadastro', 'left', 50);
- $this->detail_list->addQuickColumn('Numero Horas', 'numero_horas', 'left', 100);
- $this->detail_list->addQuickColumn('Codigo Certificado', 'codigo_certificado', 'left', 100);
- $this->detail_list->addQuickColumn('Palestrante Id', 'palestrante_id', 'left', 100);
- // detail actions
- $this->detail_list->addQuickAction( 'Edit', new TDataGridAction([$this, 'onEditDetail']), 'id', 'fa:edit blue');
- $this->detail_list->addQuickAction( 'Delete', new TDataGridAction([$this, 'onDeleteDetail']), 'id', 'fa:trash red');
- $this->detail_list->createModel();
- $panel = new TPanelGroup;
- $panel->add($this->detail_list);
- $panel->getBody()->style = 'overflow-x:auto';
- $this->form->addContent( [$panel] );
- //Aba de Inscritos
- $this->form->appendPage('Inscritos');
- // detail_Inscritos fields
- // $this->form->addContent( ['<h4>Detail_Inscritos</h4><hr>'] );
- $this->form->addFields( [$detail_Inscritos_id] );
- $this->form->addFields( [new TLabel('Data Cadastro')], [$detail_Inscritos_data_cadastro] );
- $this->form->addFields( [new TLabel('Codigo Certificado')], [$detail_Inscritos_codigo_certificado] );
- $this->form->addFields( [new TLabel('Frequencia')], [$detail_Inscritos_frequencia] );
- $this->form->addFields( [new TLabel('Segunda Via')], [$detail_Inscritos_segunda_via] );
- $this->form->addFields( [new TLabel('System User Id')], [$detail_Inscritos_system_user_id] );
- $this->form->addFields( [new TLabel('System User Unit Id')], [$detail_Inscritos_system_user_unit_id] );
- $add1 = TButton::create('add1', [$this, 'onSaveDetail_Inscritos'], 'Register', 'fa:save');
- $this->form->addFields( [], [$add1] )->style = 'background: whitesmoke; padding: 5px; margin: 1px;';
- $this->detail_Inscritos_list = new BootstrapDatagridWrapper(new TQuickGrid);
- $this->detail_Inscritos_list->style = "min-width: 700px; width:100%;margin-bottom: 10px";
- $this->detail_Inscritos_list->setId('Curso_Inscritos');
- // items
- $this->detail_Inscritos_list->addQuickColumn('Data Cadastro', 'data_cadastro', 'left', 50);
- $this->detail_Inscritos_list->addQuickColumn('Codigo Certificado', 'codigo_certificado', 'left', 100);
- $this->detail_Inscritos_list->addQuickColumn('Frequencia', 'frequencia', 'left', 100);
- $this->detail_Inscritos_list->addQuickColumn('Segunda Via', 'segunda_via', 'left', 100);
- $this->detail_Inscritos_list->addQuickColumn('System User Id', 'system_user_id', 'left', 100);
- $this->detail_Inscritos_list->addQuickColumn('System User Unit Id', 'system_user_unit_id', 'left', 100);
- // detail_Inscritos actions
- $this->detail_Inscritos_list->addQuickAction( 'Edit', new TDataGridAction([$this, 'onEditDetail_Inscritos']), 'id', 'fa:edit blue');
- $this->detail_Inscritos_list->addQuickAction( 'Delete', new TDataGridAction([$this, 'onDeleteDetail_Inscritos']), 'id', 'fa:trash red');
- $this->detail_Inscritos_list->createModel();
- $panel_inscritos = new TPanelGroup;
- $panel_inscritos->add($this->detail_Inscritos_list);
- $panel_inscritos->getBody()->style = 'overflow-x:auto';
- $this->form->addContent( [$panel_inscritos] );
- //Fim da Aba de Inscritos
- $btn = $this->form->addAction( _t('Save'), new TAction([$this, 'onSave']), 'fa:save');
- $btn->class = 'btn btn-sm btn-primary';
- $this->form->addAction( _t('Clear'), new TAction([$this, 'onClear']), 'fa:eraser red');
- // create the page container
- $container = new TVBox;
- $container->style = 'width: 90%';
- $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $container->add($this->form);
- parent::add($container);
- }
- /**
- * Clear form
- * @param $param URL parameters
- */
- public function onClear($param)
- {
- $this->form->clear(TRUE);
- TSession::setValue(__CLASS__.'_items', array());
- TSession::setValue(__CLASS__.'_items_inscritos', array());
- $this->onReload( $param );
- }
- /**
- * Save an item from form to session list
- * @param $param URL parameters
- */
- public function onSaveDetail( $param )
- {
- try
- {
- TTransaction::open('permission');
- $data = $this->form->getData();
- /** validation sample
- if (empty($data->fieldX))
- {
- throw new Exception('The field fieldX is required');
- }
- **/
- $items = TSession::getValue(__CLASS__.'_items');
- $key = empty($data->detail_id) ? 'X'.mt_rand(1000000000, 1999999999) : $data->detail_id;
- $items[ $key ] = array();
- $items[ $key ]['id'] = $key;
- $items[ $key ]['data_cadastro'] = $data->detail_data_cadastro;
- $items[ $key ]['numero_horas'] = $data->detail_numero_horas;
- $items[ $key ]['codigo_certificado'] = $data->detail_codigo_certificado;
- $items[ $key ]['palestrante_id'] = $data->detail_palestrante_id;
- TSession::setValue(__CLASS__.'_items', $items);
- // clear detail form fields
- $data->detail_id = '';
- $data->detail_data_cadastro = '';
- $data->detail_numero_horas = '';
- $data->detail_codigo_certificado = '';
- $data->detail_palestrante_id = '';
- TTransaction::close();
- $this->form->setData($data);
- $this->onReload( $param ); // reload the items
- }
- catch (Exception $e)
- {
- $this->form->setData( $this->form->getData());
- new TMessage('error', $e->getMessage());
- }
- }
- /**
- * Save an item from form to session list
- * @param $param URL parameters
- */
- public function onSaveDetail_Inscritos( $param )
- {
- try
- {
- TTransaction::open('permission');
- $data = $this->form->getData();
- /** validation sample
- if (empty($data->fieldX))
- {
- throw new Exception('The field fieldX is required');
- }
- **/
- $items_inscritos = TSession::getValue(__CLASS__.'_items_inscritos');
- $key = empty($data->detail_Inscritos_id) ? 'X'.mt_rand(1000000000, 1999999999) : $data->detail_Inscritos_id;
- $items_inscritos[ $key ] = array();
- $items_inscritos[ $key ]['id'] = $key;
- $items_inscritos[ $key ]['data_cadastro'] = $data->detail_Inscritos_data_cadastro;
- $items_inscritos[ $key ]['codigo_certificado'] = $data->detail_Inscritos_codigo_certificado;
- $items_inscritos[ $key ]['frequencia'] = $data->detail_Inscritos_frequencia;
- $items_inscritos[ $key ]['segunda_via'] = $data->detail_Inscritos_segunda_via;
- $items_inscritos[ $key ]['system_user_id'] = $data->detail_Inscritos_system_user_id;
- $items_inscritos[ $key ]['system_user_unit_id'] = $data->detail_Inscritos_system_user_unit_id;
- TSession::setValue(__CLASS__.'_items_inscritos', $items_inscritos);
- // clear detail_Inscritos form fields
- $data->detail_Inscritos_id = '';
- $data->detail_Inscritos_data_cadastro = '';
- $data->detail_Inscritos_codigo_certificado = '';
- $data->detail_Inscritos_frequencia = '';
- $data->detail_Inscritos_segunda_via = '';
- $data->detail_Inscritos_system_user_id = '';
- $data->detail_Inscritos_system_user_unit_id = '';
- TTransaction::close();
- $this->form->setData($data);
- $this->onReload( $param ); // reload the items_inscritos
- }
- catch (Exception $e)
- {
- $this->form->setData( $this->form->getData());
- new TMessage('error', $e->getMessage());
- }
- }
- /**
- * Load an item from session list to detail form
- * @param $param URL parameters
- */
- public static function onEditDetail( $param )
- {
- // read session items
- $items = TSession::getValue(__CLASS__.'_items');
- // get the session item
- $item = $items[ $param['key'] ];
- $data = new stdClass;
- $data->detail_id = $item['id'];
- $data->detail_data_cadastro = $item['data_cadastro'];
- $data->detail_numero_horas = $item['numero_horas'];
- $data->detail_codigo_certificado = $item['codigo_certificado'];
- $data->detail_palestrante_id = $item['palestrante_id'];
- // fill detail fields
- TForm::sendData( 'form_Curso', $data );
- }
- /**
- * Load an item_i from session list to detail_Inscritos form
- * @param $param URL parameters
- */
- public static function onEditDetail_Inscritos( $param )
- {
- // read session items_inscritos
- $items_inscritos = TSession::getValue(__CLASS__.'_items_inscritos');
- // get the session item_i
- $item_i = $items_inscritos[ $param['key'] ];
- $data = new stdClass;
- $data->detail_Inscritos_id = $item_i['id'];
- $data->detail_Inscritos_data_cadastro = $item_i['data_cadastro'];
- $data->detail_Inscritos_codigo_certificado = $item_i['codigo_certificado'];
- $data->detail_Inscritos_frequencia = $item_i['frequencia'];
- $data->detail_Inscritos_segunda_via = $item_i['segunda_via'];
- $data->detail_Inscritos_system_user_id = $item_i['system_user_id'];
- $data->detail_Inscritos_system_user_unit_id = $item_i['system_user_unit_id'];
- // fill detail_Inscritos fields
- TForm::sendData( 'form_Curso', $data );
- }
- /**
- * Delete an item from session list
- * @param $param URL parameters
- */
- public static function onDeleteDetail( $param )
- {
- // reset items
- $data = new stdClass;
- $data->detail_data_cadastro = '';
- $data->detail_numero_horas = '';
- $data->detail_codigo_certificado = '';
- $data->detail_palestrante_id = '';
- // clear form data
- TForm::sendData('form_Curso', $data );
- // read session items
- $items = TSession::getValue(__CLASS__.'_items');
- // get detail id
- $detail_id = $param['key'];
- // delete the item from session
- unset($items[ $detail_id ] );
- // rewrite session items
- TSession::setValue(__CLASS__.'_items', $items);
- // delete item from screen
- TScript::create("ttable_remove_row_by_id('Curso_list', '{$detail_id}')");
- }
- /**
- * Delete an item from session list
- * @param $param URL parameters
- */
- public static function onDeleteDetail_Inscritos( $param )
- {
- // reset items_inscritos
- $data = new stdClass;
- $data->detail_Inscritos_data_cadastro = '';
- $data->detail_Inscritos_codigo_certificado = '';
- $data->detail_Inscritos_frequencia = '';
- $data->detail_Inscritos_segunda_via = '';
- $data->detail_Inscritos_system_user_id = '';
- $data->detail_Inscritos_system_user_unit_id = '';
- // clear form data
- TForm::sendData('form_Curso', $data );
- // read session items_inscritos
- $items_inscritos = TSession::getValue(__CLASS__.'_items_inscritos');
- // get detail_Inscritos id
- $detail_Inscritos_id = $param['key'];
- // delete the item from session
- unset($items_inscritos[ $detail_Inscritos_id ] );
- // rewrite session items_inscritos
- TSession::setValue(__CLASS__.'_items_inscritos', $items_inscritos);
- // delete item from screen
- TScript::create("ttable_remove_row_by_id('Curso_Inscritos', '{$detail_Inscritos_id}')");
- }
- /**
- * Load the items list from session
- * @param $param URL parameters
- */
- public function onReload($param)
- {
- // read session items
- $items = TSession::getValue(__CLASS__.'_items');
- $this->detail_list->clear(); // clear detail list
- if ($items)
- {
- foreach ($items as $list_item)
- {
- $item = (object) $list_item;
- $row = $this->detail_list->addItem( $item );
- $row->id = $list_item['id'];
- }
- }
- // read session items_inscritos
- $items_inscritos = TSession::getValue(__CLASS__.'_items_inscritos');
- $this->detail_Inscritos_list->clear(); // clear detail_Inscritos list
- if ($items_inscritos)
- {
- foreach ($items_inscritos as $list_item_i)
- {
- $item_i = (object) $list_item_i;
- $row_i = $this->detail_Inscritos_list->addItem( $item_i );
- $row_i->id = $list_item_i['id'];
- }
- }
- $this->loaded = TRUE;
- }
- /**
- * Load Master/Detail data from database to form/session
- */
- public function onEdit($param)
- {
- try
- {
- TTransaction::open('permission');
- if (isset($param['key']))
- {
- $key = $param['key'];
- $object = new Curso($key);
- $items = CursoPalestrante::where('curso_id', '=', $key)->load();
- $session_items = array();
- foreach( $items as $item )
- {
- $item_key = $item->id;
- $session_items[$item_key] = $item->toArray();
- $session_items[$item_key]['id'] = $item->id;
- $session_items[$item_key]['data_cadastro'] = $item->data_cadastro;
- $session_items[$item_key]['numero_horas'] = $item->numero_horas;
- $session_items[$item_key]['codigo_certificado'] = $item->codigo_certificado;
- $session_items[$item_key]['palestrante_id'] = $item->palestrante_id;
- }
- TSession::setValue(__CLASS__.'_items', $session_items);
- var_dump($session_items);
- $items_inscritos = Inscritos::where('curso_id', '=', $key)->load();
- $session_items_inscritos = array();
- foreach( $items_inscritos as $item_i )
- {
- $item_i_key = $item_i->id;
- $session_items_inscritos[$item_i_key] = $item_i->toArray();
- $session_items_inscritos[$item_i_key]['id'] = $item_i->id;
- $session_items_inscritos[$item_i_key]['data_cadastro'] = $item_i->data_cadastro;
- $session_items_inscritos[$item_i_key]['codigo_certificado'] = $item_i->codigo_certificado;
- $session_items_inscritos[$item_i_key]['frequencia'] = $item_i->frequencia;
- $session_items_inscritos[$item_i_key]['segunda_via'] = $item_i->segunda_via;
- $session_items_inscritos[$item_i_key]['system_user_id'] = $item_i->system_user_id;
- $session_items_inscritos[$item_i_key]['system_user_unit_id'] = $item_i->system_user_unit_id;
- }
- TSession::setValue(__CLASS__.'_items_inscritos', $session_items_inscritos);
- var_dump($session_items_inscritos);
- $this->form->setData($object); // fill the form with the active record data
- $this->onReload( $param ); // reload items list
- TTransaction::close(); // close transaction
- }
- else
- {
- $this->form->clear(TRUE);
- TSession::setValue(__CLASS__.'_items', null);
- TSession::setValue(__CLASS__.'_items_inscritos', null);
- $this->onReload( $param );
- }
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- }
- /**
- * Save the Master/Detail data from form/session to database
- */
- public function onSave()
- {
- try
- {
- // open a transaction with database
- TTransaction::open('permission');
- $data = $this->form->getData();
- $master = new Curso;
- $master->fromArray( (array) $data);
- $this->form->validate(); // form validation
- echo print_r($master);
- $master->store(); // save master object
- // delete details
- $old_items = CursoPalestrante::where('curso_id', '=', $master->id)->load();
- $keep_items = array();
- // get session items
- $items = TSession::getValue(__CLASS__.'_items');
- if( $items )
- {
- foreach( $items as $item )
- {
- if (substr($item['id'],0,1) == 'X' ) // new record
- {
- $detail = new CursoPalestrante;
- }
- else
- {
- $detail = CursoPalestrante::find($item['id']);
- }
- $detail->data_cadastro = $item['data_cadastro'];
- $detail->numero_horas = $item['numero_horas'];
- $detail->codigo_certificado = $item['codigo_certificado'];
- $detail->palestrante_id = $item['palestrante_id'];
- $detail->curso_id = $master->id;
- $detail->store();
- $keep_items[] = $detail->id;
- }
- }
- if ($old_items)
- {
- foreach ($old_items as $old_item)
- {
- if (!in_array( $old_item->id, $keep_items))
- {
- $old_item->delete();
- }
- }
- }
- // delete detail_Inscritoss
- $old_items_inscritos = Inscritos::where('curso_id', '=', $master->id)->load();
- $keep_items_inscritos = array();
- // get session items_inscritos
- $items_inscritos = TSession::getValue(__CLASS__.'_items_inscritos');
- if( $items_inscritos )
- {
- foreach( $items_inscritos as $item_i )
- {
- if (substr($item_i['id'],0,1) == 'X' ) // new record
- {
- $detail_Inscritos = new Inscritos;
- }
- else
- {
- $detail_Inscritos = Inscritos::find($item_i['id']);
- }
- $detail_Inscritos->data_cadastro = $item_i['data_cadastro'];
- $detail_Inscritos->codigo_certificado = $item_i['codigo_certificado'];
- $detail_Inscritos->frequencia = $item_i['frequencia'];
- $detail_Inscritos->segunda_via = $item_i['segunda_via'];
- $detail_Inscritos->system_user_id = $item_i['system_user_id'];
- $detail_Inscritos->system_user_unit_id = $item_i['system_user_unit_id'];
- $detail_Inscritos->curso_id = $master->id;
- $detail_Inscritos->store();
- $keep_items_inscritos[] = $detail_Inscritos->id;
- }
- }
- if ($old_items_inscritos)
- {
- foreach ($old_items_inscritos as $old_item_i)
- {
- if (!in_array( $old_item_i->id, $keep_items_inscritos))
- {
- $old_item_i->delete();
- }
- }
- }
- TTransaction::close(); // close the transaction
- // reload form and session items
- $this->onEdit(array('key'=>$master->id));
- new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- $this->form->setData( $this->form->getData() ); // keep form data
- TTransaction::rollback();
- }
- }
- /**
- * Show the page
- */
- public function show()
- {
- // $param = func_get_arg(0);
- // check if the datagrid is already loaded
- if (!$this->loaded AND (!isset($_GET['method']) OR $_GET['method'] !== 'onReload') )
- {
- $this->onReload( func_get_arg(0) );
- }
- parent::show();
- }
- }
- ?>
O erro está relacionado com a composição. Por algum motivo na hora de salvar a edição ocorre o erro "connection failed". Tem alguma coisa que ficou faltando?
Troque essa linha do onSave
$detail_Inscritos = Inscritos::find($item_i['id']);
Por essas
$detail_Inscritos = new Inscritos;
$detail_Inscritos = $detail_Inscritos->fromArray($item_i);
Exemplo:
Felipe,
continua com o mesmo erro. Abaixo o código com a substituição que você sugeriu:
</Cleber>
O mais estranho é que o Mestre/Detalhe vetorial funciona normalmente...
Cleber, o erro "Connection failed" aparece muitas vezes quando a exibição de erros do php está desabilitada. Tente habilitar os erros ou procurar nos logs para identificar o que está ocorrendo. Acho que vai facilitar a resolução do problema.
Nataniel,
vou habilitar!
Nataniel,
agora mostrou o erro.
Sabe do que se trata?
Fatal error: Uncaught Error: Call to undefined method stdClass::store()
Esse erro quer dizer que está chamando a função store em um objeto genérico.
A função fromArray não tem retorno, com isso a variável $detail_Inscritos estava sendo reescrita com null. Basta chamar a função, sem atribuir a outra variável.
Nataniel,
era isso mesmo!
Agora estou tendo um problemas com isso $key = empty($data->detail_Inscritos_id) ? 'X'.mt_rand(1000000000, 1999999999) : $data->detail_Inscritos_id;
Está gerando uma chave primária não inteira.