Ajuda em

Ola galera, sou novo aqui na comunidade e me encantei com o Yii, eu estava a pouco tempo estudando o PRADO, mas percebi que relamente o Yii tem uma sistematica de trabalho fantastica, e por isso estou conhecendo.

Estou desenvolvendo uma ferramenta como parte do aprendizado em Yii, e encontrei uma duvida que não achei nem no wiki nem nos forums.

Eu li e fiz os passos do wiki:

How to use a single form to collect data for two or more models?

http://www.yiiframework.com/wiki/19/how-to-use-a-single-form-to-collect-data-for-two-or-more-models/

E entendi como são separados e validados os dados e fornecido a cada modelo.

o que acontece é que eu estou fazendo um formulário que além de usar dois modelos deve associar um modelo a outro, explicarei melhor nas imagens abaixo:

Modelo de dados

1173

database.JPG

Suposto Formulario

1172

form.JPG

Como mencionei, quero que os 2 modelos estejam relacionados, ao se preencher o formulario com os dados do Centro de Custo e preencher ao menos um modulo, quero que o numero usado para o centro de custo seja automaticamente associado ao modulo (que tem uma identificação para o centro de custo pertencente a aquele modulo)

Detalhe: Os campos estão aparecendo no "Suposto formulario" (feito no mspaint) mas no banco de dados ambos são auto_increment

Minha duvida e justamente por ja ter utilizado o prado e saber que la eu conssigo buscar algo como:

CentroCusto::finder()->withModulos()->findAll();

Porém ainda não vi nenhum exemplo de como fazer isso no Yii.

Se eu não fui claro e precisarem de mais detalhes é so me informar que eu tento complementar.

Grato

Att

Oi Fabricio,

Minha primeira vez tentando ajudar alguem aqui no forum.

No seu caso eu colocaria os dois sub-formularios dentro de uma unica <form> tag ou widget:

Os dois botoes teriam values diferentes p. ex. "Gravar Centro" e "Gravar". No controller eu verificaria o value do submit e faria a procedure de acordo com o valor submetido.

Outra ideia seria resolver via javascript ou JQuery:

Cada botao com uma id diferente e cada botao com o evento onclick alterando o valor de um hiddenField. Dai o controller verificaria o value do hiddenField e faria a procedure de acordo.

Quanto ao metodo similar ao do PRADO, no Yii seria algo assim:

CentroCusto::model()->with(‘modulos’)->findAll();

Lembrando que o with(‘modulos’) so funciona se voce definir o relacionamento no model CentroCusto…

Não sei se respondi a sua duvida…

abs

Vitor

Ajudou e muito sim vitor muito obrigado.

Eu mudei um pouco a logica da tela pois lendo sobre "tabular input" eu consegui adicionar varios campos para serem preenchidos de uma só vez, assim usei apenas um hiddenField com o ID do Centro de custo correspondente e




                            $item->attributes = $_POST['Modulos'][$i];

                            $item->cdCentroCusto = $_POST['Centrocusto']['cdCentroCusto'];

                            $item->save();



Estou aos poucos entendendo a logica por tras do Yii, com o exemplo que você deu, comparando com o PRADO eu ja consegui fazer com que ao selecionar um centro de custo ele ja me traga todos os seus modulos para visualização




	/**

	 * Mostra todos os modulos de um determinado centro de custo

	 * @param integer $id o codigo do centro de custo consultado

	 */

	public function actionView($id)

	{

		$model=CentroCusto::model()->with('moduloses')->findByPk((int)$id);

		if($model===null)

			throw new CHttpException(404,'The requested page does not exist.');

                

		$this->render('view',array(

			'model'=>$model,

		));

	}



Vlw pela ajuda.