Yii Framework Forum: Active Record Relacional - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Active Record Relacional Rate Topic: -----

#1 User is offline   thiago.silva 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 90
  • Joined: 13-February 13

Posted 26 February 2013 - 08:44 AM

Bom dia, eu estou estou tendo problemas em entender como funciona o active record relacional quando é has_many.
Eu possuo 3 tabelas, Produtos, Subcategorias e ProdutosSucategorias, onde a terceira guarda o id_produto e o id_subcategoria para que cada produto possa ter muitas subcategorias. Gostaria de saber como fazer com que o CRUD salve na tabela "ProdutosSubcategorias" as Subcategorias, e como lista-las considerando as que ja estão cadastradas(update)
0

#2 User is offline   ricardo_rm 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 16-January 12

Posted 27 February 2013 - 06:50 AM

View Postthiago.silva, on 26 February 2013 - 08:44 AM, said:

Bom dia, eu estou estou tendo problemas em entender como funciona o active record relacional quando é has_many.
Eu possuo 3 tabelas, Produtos, Subcategorias e ProdutosSucategorias, onde a terceira guarda o id_produto e o id_subcategoria para que cada produto possa ter muitas subcategorias. Gostaria de saber como fazer com que o CRUD salve na tabela "ProdutosSubcategorias" as Subcategorias, e como lista-las considerando as que ja estão cadastradas(update)


Thiago, se entendi bem não há nada de mais .. simplesmente no crud "ProdutosSucategorias" você terá que inserir a categoria e a subcategoria a ser cadastrada ....

Agora se você quiser existe como customizar o cadastro para que ele traga num comboBox todas as subcategorias e produtos, existentes nas devidas tabelas, para evitar que você tenha que digitar o id a ser inserido, é isto que você esta querendo fazer?

Abraço
0

#3 User is offline   thiago.silva 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 90
  • Joined: 13-February 13

Posted 27 February 2013 - 07:00 AM

View Postricardo_rm, on 27 February 2013 - 06:50 AM, said:

Thiago, se entendi bem não há nada de mais .. simplesmente no crud "ProdutosSucategorias" você terá que inserir a categoria e a subcategoria a ser cadastrada ....

Agora se você quiser existe como customizar o cadastro para que ele traga num comboBox todas as subcategorias e produtos, existentes nas devidas tabelas, para evitar que você tenha que digitar o id a ser inserido, é isto que você esta querendo fazer?

Abraço

exatamente, estou tentando fazer um dropDownList com $model para que ele automaticamente preencha as selecionadas(quando for update) porem fazer isto com o model ex:
$model->ProdutosSubcategorias
retorna erro ao dar load na classe, e se utilizar só $model, diz que id_subcategoria é indefinido.
Também não sei qual seria a maneira correta de salvar após, estava pensando em beforeSave()
0

#4 User is offline   ricardo_rm 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 16-January 12

Posted 27 February 2013 - 07:14 AM

Ok ... então você tem que fazer o seguinte:

La na sua view onde tem o form substitua a linha onde tem "$form->textField()", pelo trecho abaixo:

//Estou supondo que o nome do campo referente a categoria na tabela "ProdutosSucategorias" seja 'id_subcategoria', caso não seja você deve trocar
<?php 
echo $form->DropDownList($model,'id_subcategoria',Subcategorias::getItens(),array('empty'=>'')); 
?>


e no model Subcategorias crie o seguinte método

/*
* Método que retorna um array chave/valor para todas os registros da tabela
*/
public static function getItens(){
	//Estou supondo que exista os campos id e nome_subcategoria na tabela subcategorias, caso não seja você deve trocar	
	return CHtml::listData(self::model()->findAll(), 'id', 'nome_subcategoria');

}


Thiago, só fique atento para trocar o nome dos campos, conforme mencionei nos comentários, ok?!?

Depois é só fazer o mesmo para produtos, informando o respectivo campo e criando o método no model ...
0

#5 User is offline   thiago.silva 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 90
  • Joined: 13-February 13

Posted 27 February 2013 - 07:23 AM

View Postricardo_rm, on 27 February 2013 - 07:14 AM, said:

Ok ... então você tem que fazer o seguinte:

La na sua view onde tem o form substitua a linha onde tem "$form->textField()", pelo trecho abaixo:

//Estou supondo que o nome do campo referente a categoria na tabela "ProdutosSucategorias" seja 'id_subcategoria', caso não seja você deve trocar
<?php 
echo $form->DropDownList($model,'id_subcategoria',Subcategorias::getItens(),array('empty'=>'')); 
?>


e no model Subcategorias crie o seguinte método

/*
* Método que retorna um array chave/valor para todas os registros da tabela
*/
public static function getItens(){
	//Estou supondo que exista os campos id e nome_subcategoria na tabela subcategorias, caso não seja você deve trocar	
	return CHtml::listData(self::model()->findAll(), 'id', 'nome_subcategoria');

}


Thiago, só fique atento para trocar o nome dos campos, conforme mencionei nos comentários, ok?!?

Depois é só fazer o mesmo para produtos, informando o respectivo campo e criando o método no model ...

Então, é mais ou menos desta forma que estava tentando(mudei para esta porque achei mais organizado), mas da erro de id_subcategoria indefinido pois id_subcategoria não faz parte do model Produtos e sim do ProdutosSubcategorias que ele está relacionado, mas acredito que não funcione a relação neste caso
0

#6 User is offline   thiago.silva 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 90
  • Joined: 13-February 13

Posted 27 February 2013 - 07:28 AM

Vou postar partes do código para facilitar:

Model Produtos
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'pedidoProdutos' => array(self::HAS_MANY, 'PedidoProdutos', 'id_produto'),
			'produtosSubcategorias' => array(self::HAS_MANY, 'Subcategorias', 'ProdutosSubcategorias(id_produto,id_subcategoria'),
		);
	}

Desta forma eu tive que criar um model para ProdutosSubcategorias, somente para isto e realizar operações de save depois. Não sei se era realmente necessário


_Form Produtos
        <div class="row">
		<?php echo $form->labelEx($model,'id_subcategoria'); ?>
		<?php echo $form->DropDownList($model,'id_subcategoria',Subcategorias::getItens('id','subcategoria'),array('empty'=>'','multiple'=>'multiple'));?>
		<?php echo $form->error($model,'id_subcategoria'); ?>
	</div>


Erro:

A propriedade "Produtos.id_subcategoria" não está definida.
0

#7 User is offline   ricardo_rm 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 16-January 12

Posted 27 February 2013 - 07:42 AM

thiago,

Você criou o método getItens no model Subcategorias?
Esse trecho do DropDownList você deve inserir no _form de "ProdutosSubcategorias" ...
Outra coisa, o método getItens não necessita de parametros ...

caso não entenda, posta o nome dos campos das 3 tabelas que ajudo você ...

abraço..
0

#8 User is offline   thiago.silva 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 90
  • Joined: 13-February 13

Posted 27 February 2013 - 07:51 AM

View Postricardo_rm, on 27 February 2013 - 07:42 AM, said:

thiago,

Você criou o método getItens no model Subcategorias?
Esse trecho do DropDownList você deve inserir no _form de "ProdutosSubcategorias" ...
Outra coisa, o método getItens não necessita de parametros ...

caso não entenda, posta o nome dos campos das 3 tabelas que ajudo você ...

abraço..

Sim criei, mas alterei para definir os items via parâmetros por isto esta assim, Então ai que esta o problema este trecho está no _form de Produtos pois as subcategorias devem ser inseridas nos produtos entende? Tipo ao adicionar um produto o usuário deve selecionar as subcategorias em que ele está relacionado... Mas não sei como realizar isto com ActiveRecord
0

#9 User is offline   ricardo_rm 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 16-January 12

Posted 27 February 2013 - 07:55 AM

View Postthiago.silva, on 27 February 2013 - 07:51 AM, said:

Sim criei, mas alterei para definir os items via parâmetros por isto esta assim, Então ai que esta o problema este trecho está no _form de Produtos pois as subcategorias devem ser inseridas nos produtos entende? Tipo ao adicionar um produto o usuário deve selecionar as subcategorias em que ele está relacionado... Mas não sei como realizar isto com ActiveRecord


ok, você pode passar os parametros se quiser ... porém, você deve ter um CRUD de ProdutosSubcategorias, afinal é lá que relacionamos um produto a uma subcategoria, certo?

dessa forma você precisa inserir o trecho neste form, entendeu?
0

#10 User is offline   thiago.silva 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 90
  • Joined: 13-February 13

Posted 27 February 2013 - 08:02 AM

View Postricardo_rm, on 27 February 2013 - 07:55 AM, said:

ok, você pode passar os parametros se quiser ... porém, você deve ter um CRUD de ProdutosSubcategorias, afinal é lá que relacionamos um produto a uma subcategoria, certo?

dessa forma você precisa inserir o trecho neste form, entendeu?

Hum, então eu gero os códigos para ProdutosSubcategorias também e insiro o trecho do _form em produtos?
Não intendi exatamente a parte da inserção, pois na hora de listar save e tudo mais estaria em produtos de qualquer forma. Poderia dar um exemplo?
Quanto as tabelas estão bem simples por enquanto é apenas:

Produtos   | Subcategorias   | produtos_subcategorias
id_produto | id_subcategoria | id_produto_subcategoria
produto    | subcategoria    | id_produto
           |                 | id_subcategoria

0

#11 User is offline   ricardo_rm 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 16-January 12

Posted 27 February 2013 - 08:32 AM

Ok, vamos la, segue estes passos:

1 - Gere o CRUD de ProdutosSubcategorias
2 - Abra a view _form de ProdutosSubcategorias, deve haver um trecho parecido com o abaixo:

<?php echo $form->textField($model,'id_subcategoria',array()); ?>


substitua por:


<?php echo $form->DropDownList($model,'id_subcategoria',Subcategorias::getItens('id_subcategoria','subcategoria'),array('empty'=>'');?>


3 - Vá no model Subcategorias e crie o seguinte método:

public static function getItens($chave, $valor){  
        return CHtml::listData(self::model()->findAll(), $chave, $valor);
}


4 - De uma olhada na página, provavelmente agora você tem um combo no item Subcategoria
5 - Faça o mesmo para produto substituindo o textField por DropDownList e criand o método getItens

Funcionou?
1

#12 User is offline   thiago.silva 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 90
  • Joined: 13-February 13

Posted 27 February 2013 - 08:49 AM

View Postricardo_rm, on 27 February 2013 - 08:32 AM, said:

Ok, vamos la, segue estes passos:

1 - Gere o CRUD de ProdutosSubcategorias
2 - Abra a view _form de ProdutosSubcategorias, deve haver um trecho parecido com o abaixo:

<?php echo $form->textField($model,'id_subcategoria',array()); ?>


substitua por:


<?php echo $form->DropDownList($model,'id_subcategoria',Subcategorias::getItens('id_subcategoria','subcategoria'),array('empty'=>'');?>


3 - Vá no model Subcategorias e crie o seguinte método:

public static function getItens($chave, $valor){  
        return CHtml::listData(self::model()->findAll(), $chave, $valor);
}


4 - De uma olhada na página, provavelmente agora você tem um combo no item Subcategoria
5 - Faça o mesmo para produto substituindo o textField por DropDownList e criand o método getItens

Funcionou?


Funcionou, porém o padrão que gostaria é que fosse selecionada a subcategoria ao adicionar produtos e não, adicionar produto e depois adicionar subcategoria
1

#13 User is offline   ricardo_rm 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 16-January 12

Posted 27 February 2013 - 08:55 AM

View Postthiago.silva, on 27 February 2013 - 08:49 AM, said:

Funcionou, porém o padrão que gostaria é que fosse selecionada a subcategoria ao adicionar produtos e não, adicionar produto e depois adicionar subcategoria


Então, mas da forma que a modelagem das suas tabelas foi feita o melhor é esse jeito que lhei passei ....

agora, se você me disser que um produto tem apenas 1 subcategoria você pode deletar a tabela ProdutosSubcategorias e inserir o campo id_subcategoria na tabela Produtos
0

#14 User is offline   thiago.silva 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 90
  • Joined: 13-February 13

Posted 27 February 2013 - 08:59 AM

View Postricardo_rm, on 27 February 2013 - 08:55 AM, said:

Então, mas da forma que a modelagem das suas tabelas foi feita o melhor é esse jeito que lhei passei ....

agora, se você me disser que um produto tem apenas 1 subcategoria você pode deletar a tabela ProdutosSubcategorias e inserir o campo id_subcategoria na tabela Produtos

Então na realidade é apenas uma, mas com apenas uma eu ja havia entendido como fazer, fiz desta forma para aprender como ficaria apenas pois estou aprendendo o Yii e caso decida usar preciso saber já que é bastante usada esta forma. Mas obrigado, ajudou muito.
0

#15 User is offline   ricardo_rm 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 16-January 12

Posted 27 February 2013 - 09:03 AM

View Postthiago.silva, on 27 February 2013 - 08:59 AM, said:

Então na realidade é apenas uma, mas com apenas uma eu ja havia entendido como fazer, fiz desta forma para aprender como ficaria apenas pois estou aprendendo o Yii e caso decida usar preciso saber já que é bastante usada esta forma. Mas obrigado, ajudou muito.


Ahh legal então, que bom que entendeu, realmente é bem usada. Seja bem vindo ao Yii e precisando de ajuda estamos ai ...

abraço
1

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users