estanciando uma classe dentro de outra classe

Bom dia pessoal, estou com um problema, tenho um modulo tb_produtos, e outro tb_fotos, onde em Tb_produtosController.php na public function actionCreate() eu faço o upload de uma imagem e tenho que ali mesmo salvar no modulo tb_fotos, ou seja tenho que salvar um registro de outro modulo dentro desse tb_produtos, tentei fazer isso:




$_foto['tb_fotos']['arquivo'] = "arquivo.jpg";

$_foto['tb_fotos']['produto_id'] = 1;


$foto = new tb_fotos;

$foto->attributes = $_fotos['tb_fotos'];

$foto->save();



tentei colocar esse codigo dentro do actionCreate() do tb_produtos, porem não deu certo.

Como eu poderia fazer essa operação?

O erro:

CDbException

Description

CDbCommand failed to execute the SQL statement: SQLSTATE[HY000]: General error: 1452 Cannot add or update a child row: a foreign key constraint fails (dcasarini.tb_fotos, CONSTRAINT tb_fotos_ibfk_1 FOREIGN KEY (produto_id) REFERENCES tb_produtos (id_produto) ON DELETE NO ACTION ON UPDATE NO ACTION)INSERT INTO tb_fotos (arquivo, produto_id) VALUES (:yp0, :yp1)

Achei uma forma que não da erro, porem não ta salvando no banco de dados.




$dados["tb_fotos"]["arquivo"] = $arquivo;

$dados["tb_fotos"]["produto_id"] = "1";

tb_fotos::model()->attributes = $dados['tb_fotos'];

tb_fotos::model()->save();



da segunda forma não vai funcionar mesmo … use a 1º forma e cheque o retorno de errors do seu model.




$_foto['tb_fotos']['arquivo'] = "arquivo.jpg";

$_foto['tb_fotos']['produto_id'] = 1;


$foto = new tb_fotos;

$foto->attributes = $_fotos['tb_fotos'];

$foto->save();


var_dump($foto->errors);




Consegui criar um registro na tabela porem não vai o valor setado nas variaveis, o campo arquivo fica em branco e o produto_id zerado:




$_arquivo['tb_arquivos']['arquivo'] = "foto.jpg";

$_arquivo['tb_arquivos']['produto_id'] = 1;


$foto = new tb_fotos;

$foto->attributes = $_arquivo['tb_arquivo'];

$foto->save(true, array('arquivo'=>'foto.jpg', 'produto_id'=>1));



Ae pessoal depois de muitas tentativas consegui…

fiz assim:




$foto = new tb_fotos;

$foto->attributes = array('id_foto'=>'', 'arquivo'=>'foto.jpg', 'produto_id'=>'1');

$foto->save();