Model Is Not Set - Problem Z Wczytaniem Wartości Do Pola Tekstowego

Cześć. Mam taki problem z którym nie mogę sobie poradzić. Mianowicie:

Mam 3 tabele w bazie danych




tbl_city(id,name,commune_id)

tbl_comune(id,name)

tbl_observation(id, name, city_id)



Mam również 3 modele, z ustawionymi relacjami jak niżej:




City('idCommune' => array(self::BELONGS_TO, 'Commune', 'commune_id'),

Commune(bez relacji)

Observation('idCity' => array(self::BELONGS_TO, 'City', 'city_id').



W moim widoku (_form.php) służącym do dodawania obserwacji mam pole tekstowe jak poniżej:




$form->textFieldRow($model->idCity->idCommune,'name');?>



Problem polega na tym, że kiedy próbuję dodać nową obserwację (akcja-create) za pomocą modelu Observation, wyskakuje błąd CException:




TbInput: Failed to initialize widget! Model is not set. 



Natomiast błąd nie wyskakuje i wszystko jest ok gdy próbuję edytować istniejącą już obserwację.

Myślę, że błąd ten jest spowodowany tym, że gdy próbuję utworzyć nową obserwację, mój widok próbuje załadować pole name z modelu Commune - ale nie ma w nim żadnego odnośnika w modelu Observation. Czy ktoś mógły mnie naprowadzić jak naprawić ten błąd?

Z góy dziękuję i pozdrawiam

Tomek

daj fragment kontrolera, tego co ladujesz do _form.php

fragment kontrolera Observation odpowiedzialny za create- standardowy kod:


	

public function actionCreate()

	{

		$model=new Observation;


		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


		if(isset($_POST['Observation']))

		{

			$model->attributes=$_POST['Observation'];

			if($model->save())

				$this->redirect(array('view','id'=>$model->id));

		}


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

			'model'=>$model,

		));

	}



Dzięki

To moze dodaj drugi model




$city = new City;

//w widoku


$form->textFieldRow($city,'name');?>

//pozniej w cotrolerze

if($city->save()){

echo "success";

}

//i dorzuc model do widoku

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

                        'model'=>$model,

'city'=>$city,

                ));



mozesz tez skorzystac z roszerzenia

http://www.yiiframework.com/extension/eadvancedarbehavior/

kurcze, to rozwiązanie powyżej też nie działa:( Mi chodzi najprościej o to aby tylko wyświetlić (bez zapisywania informacji w drugim modelu) nazwę gminy (z modelu Commune) na podstawie miejscowości - wszystko działa poza jednym wyjątkiem - utworzenia nowej obserwacji - wtedy wywala błąd :(

Skoro chcesz tylko wyświetlić nazwę gminy, to nie bardzo widzę sens używania widżetu dla tego pola.

Możesz po prostu wyświetlać tę wartość bezpośrednio w trybie edycji:




<div id="idCommune"><?php if (! $model->isNewRecord) echo $model->idCity->idCommune ?></div>



Następnie podłącz event onchange pod dropdownlist, w którym wybierasz miasto, tak, aby aktualizował zawartość div #idCommune.

Możesz się oprzeć np. na tym:

http://www.yiiframework.com/wiki/24

Dzięki luk, o to mi dokładnie chodziło. Najprostsze rozwiązania są najlepsze. Pozdrawiam:)