radames  
            (Radameh)
           
           
          
              
                March 7, 2012,  2:49pm
               
               
          1 
           
         
        
          Senhores
eu tenho 3 tabelas para fazer um cadastro
[b]tebela_1
tebela_2
tebela_3[/b]
[b]id_tb_1
id_tb_2
id_tb_3[/b]
O id_tb_1  será incerida na tabela_2 
E o id_tb_2  será incerido na tabela_3  varias vezes
quando eu cadastro ele me gera isso …
Array
(
    [tebela_1] => Array
        (
            [id] => 233
            [ativo] => S
            [texto] => cadastro teste 01
            [revisao] => 1
        )
    [tebela_2] => Array
        (
            [id_tb_1] => Array
                (
                    [0] => Controle 1
                    [1] => Controle 2
                    [2] => Controle 3
                )
        )
    [tebela_3] => Array
        (
            [id_tb_2] => Array
                (
                    [0] => Verificação 1.1
                    [1] => Verificação 1.2
                    [2] => Verificação 1.3
                    [3] => Verificação 2.1
                    [4] => Verificação 2.2
                    [5] => Verificação 2.3
                    [6] => Verificação 3.1
                    [7] => Verificação 3.2
                    [8] => Verificação 3.3
                )
        )
    [yt6] => Cadastrar
)
 
como eu associo isso 
[tebela_2] => Array
        (
            [id_tb_1] => Array
                (
                    [0] => Verificação 1
                )
        )
[tebela_3] => Array
        (
            [id_tb_2] => Array
                (
                    [ID] => Verificação 1.1
                    [ID] => Verificação 1.2
                    [ID] => Verificação 1.3
                )
        )
 
via $_POST  ??
eu uso javascript para multiplicar os campos de preenchimento do formulário …
         
         
           
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            Newerton  
            (Newerton Araujo)
           
           
          
              
                March 9, 2012, 12:27am
               
               
          2 
           
         
        
          Radames,
Qual seria a ordem da inserção!
Inserir todas de uma só vez, ou usar a primary key da Tabela 1, na Tabela 2, a primary key da Tabela 2 na Tabela 3?
Você pode fazer assim resumidamente:
$model1 = new Tabela1;
$model2 = new Tabela2;
$model3 = new Tabela3;
if(isset($_POST['tabela_1'])){
	$model1->attributes = $_POST['tabela_1'];
	
	if($model1->save()){
	
		if(isset($_POST['tabela_2'])){
			$model2->primaryKey = $model1->primaryKey;
			$model2->attributes = $_POST['tabela_2'];
			
			if($model2->save()){
				if(isset($_POST['tabela_3'])){
					
					$model3->primaryKey = $model2->primaryKey;
					$model3->attributes = $_POST['tabela_3'];
					
					$model3->save();
				}			
			}
		}
	}
}
 
         
         
        
            
            
            
         
         
             
             
          
       
      
        
        
          Você pode fazer isso utilizando o método transaction também.
No caso, você primeiro cria uma função no controller responsavel por efetuar o
processamento dos dados referentes a cada model.
	 protected function transactionDados($model, $postvars) {
		// Cria as relações de dados
		$transaction = $model->dbConnection->beginTransaction();
		try
		{
			if($postvars) {
				$model->attributes = $postvars;
				$model->save();
				$transaction->commit();
			}
		}
		catch(Exception $e) // Exception que cancela a alteração em caso de erro
		{
			$transaction->rollBack();
		}	 
	 }
 
E depois no action de sua necessidade, transforma os Models e Postvars em array e chama a função responsavel pelo processamento dos dados.
	 ...
	 {
	 
		$models = array(array($model1, $_POST['Model1']), array($model1, $_POST['Model2']), array($model1, $_POST['Model3']));
		foreach ($models as $model) {
			$this->transactionDados($model[0], $model[1]));
		}	 
	 }
 
Acredito que desta forma fica bem mais dinâmico e prático inserir dados no banco de dados.
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            radames  
            (Radameh)
           
           
          
              
                March 13, 2012,  8:28pm
               
               
          4 
           
         
        
          Será mais ou menos dessa forma representada no desenho …
2662
att,
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            radames  
            (Radameh)
           
           
          
              
                March 13, 2012,  8:41pm
               
               
          5 
           
         
        
          acho que essa imagem fica melhor ainda …
2663
att,
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            radames  
            (Radameh)
           
           
          
              
                March 13, 2012,  8:54pm
               
               
          6 
           
         
        
          Segue o código exemplo … de como eu fiz mas não deu certo devido ao array  mais o for 
public function actionCreate()
{
	$model1	= new tabela1;
	$model2	= new tabela2;
	$model3	= new tabela3;
	
	if ( isset($_POST['tabela1']) )
	{	
		$model1->attributes = $_POST['tabela1'];
		
		if ( $model1->validate() ) {
			$model1->save();
		}
		
		if ( $model1->id1 )
		{
			if ( isset($_POST['tabela2']) )
			{
				$id2 = $_POST['tabela2']['id2'];
				for ($j = 0 ; $j <= count($id2) ; $j++)
				{
					$model2 = new tabela2;
					$model2->id1 = (int)$model1->id1;
					$model2->nome = $nome[$j];
					
					if ( $model2->validate() )
					{
						$model2->save();
						if ( $model2->id2 )
						{
							if ( isset($_POST['tabela3']) )
							{
								$id3 = $_POST['tabela3']['id3'];
								for ($i = 0 ; $i <= count($id3) ; $i++)
								{
									$model3 = new tabela3;
									
									$model3->id2  = (int)$model2->id2;
									$model3->nome = $nome[$i];
									
									if ( $model3->validate() )
									{
										$model3->save();
										echo $model3->id3;
									}
								} // Segundo for.
							} // if do tabela3.
						}
					}
				} // Primeiro for.
			} // fim do if tabela2 and tabela3 ...
			$this->redirect(array('view','id'=>$model1->id1));
		} // fim do id1.
	} // fim do isset tabela1.
	$this->render('create',array(
		'model1'	=> $model1,
		'model2'	=> $model2,
		'model3'	=> $model3,
	));
}
 
         
         
        
            
            
            
         
         
             
             
          
       
      
        
        
          
Você pode fazer isso utilizando o método transaction também.
No caso, você primeiro cria uma função no controller responsavel por efetuar o
processamento dos dados referentes a cada model.
	 protected function transactionDados($model, $postvars) {
		// Cria as relações de dados
		$transaction = $model->dbConnection->beginTransaction();
		try
		{
			if($postvars) {
				$model->attributes = $postvars;
				$model->save();
				$transaction->commit();
			}
		}
		catch(Exception $e) // Exception que cancela a alteração em caso de erro
		{
			$transaction->rollBack();
		}	 
	 }
 
E depois no action de sua necessidade, transforma os Models e Postvars em array e chama a função responsavel pelo processamento dos dados.
	 ...
	 {
	 
		$models = array(array($model1, $_POST['Model1']), array($model1, $_POST['Model2']), array($model1, $_POST['Model3']));
		foreach ($models as $model) {
			$this->transactionDados($model[0], $model[1]));
		}	 
	 }
 
Acredito que desta forma fica bem mais dinâmico e prático inserir dados no banco de dados.
 
 
Nesse caso, quando a chave primária do $model1 é passada para os models seguintes?
Quando o $model3 retornar uma exception, por exemplo, o módulos anteriores que sensibilizaram o banco não serão afetados pelo rollback do $model3, não é?!
É má interpretação do código de minha parte, ou o algoritmo está incompleto?
Estou tentando aplicar a lógica citada, mas ainda sem muito sucessos.
some help?
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            radames  
            (Radameh)
           
           
          
              
                May 17, 2012,  7:12pm
               
               
          8 
           
         
        
          
Nesse caso, quando a chave primária do $model1 é passada para os models seguintes?
Quando o $model3 retornar uma exception, por exemplo, o módulos anteriores que sensibilizaram o banco não serão afetados pelo rollback do $model3, não é?!
É má interpretação do código de minha parte, ou o algoritmo está incompleto?
Estou tentando aplicar a lógica citada, mas ainda sem muito sucessos.
some help?
 
 
Então @Tirus 
Eu tenho que criar uma Ficha , essa ficha tem Vários Itens de Controle  e para cadas Itens de Controle  tem vários Itens de Verificação .
primeiro eu salvo no Banco a Ficha , e depois atribua para cada Itens de Controle  e salvo no banco …
E depois eu não consigo salvar para cada Itens de Controle  os Itens de Verificação  …
eu criei um formulário que tem um botão que adiciona a quantidade que eu quero de Itens de Controle  e adiciona para cada Itens de Controle  a quantidade que eu quero para cada Itens de Verificação .
Lembrando que isso gerará uma Ficha.
é interessante isso …
         
         
        
            
            
            
         
         
             
             
          
       
      
        
          
          
            radames  
            (Radameh)
           
           
          
              
                May 17, 2012,  7:15pm
               
               
          9 
           
         
        
          Eu estou pensado em trazer via form
assim,
$id3 = $_POST['tabela3']['id2']['id3'];