beforeSave nie zmienia wartosci

W kolumnie ‘name’ zamierzam przechowywac wartości poprzedzane prefiksem, ktory jest scisle przypisany do uzytkownika. Zważywszy na to, że sam Controller być może z czasem nabierze większej ilości akcji z zapisywaniem do bazy danych lub aktualizacji danych to chciałbym uniemożliwić mi błędu wprowadzenia nazwy bez prefiksu.

Rozwiązaniem moim zdaniem powinna być funkcja beforeSave(), gdyż:




This method is invoked before saving a record (after validation, if any). The default implementation raises the onBeforeSave event. You may override this method to do any preparation work for record saving. Use isNewRecord to determine whether the saving is for inserting or updating record. Make sure you call the parent implementation so that the event is raised properly.



No i mój beforeSave() wrzucony do modelu ( bo do modelu to sie powinno wrzucic, prawda? )




public function beforeSave(){

			parent::beforeSave();

			$prefix = Yii::app()->user->prefix;

			$this->name = $prefix.''.$this->name;

			if ($this->isNewRecord){

				$this->host='nowy';

			} else {

				$this->host='aktu';

			}

			return true;

		}



Dodatkowo mam wrażenie, że ta funkcja nie jest wywoływana.




$konto = new Urzadzenia;

$konto->updateByPk($id, $_POST['Urzadzenia']);



Czy to poprostu sposobu aktualizacji danych, która np. nie wywołuje beforeSave() ?

updateByPk() nie wywołuje beforeSave(), użyj update().

Dzięki kolego. Poszło :)

I jeszcze takie szybkie pytanie uzupełniające. update() przyjmuje tablicę. Czy to jest tablica, która zawiera pola do aktualizacji, czyli mogę podrzucić mu array(‘pole1’, ‘pole2’) ?

Dodam od siebie dla przyszłych poszukiwaczy, że rozwiązanie wygląda tak:




$konto = new Urzadzenia;

$dane = $konto->findByAttributes(array(

						'name' => $nazwa,

						'id' => $id,

						'uzytkownicy_id' => Yii::app()->user->id

					));

$dane->attributes = $_POST['[NAZWA_FORMULARZA]'];

$dane->update();



PS. Zgodnie z dokumentacją: update() nie wywołuje validate() trzeba wywolac we wlasnym zakresie.

Tak, można przekazać tablicę atrybutów do aktualizacji jako jedyny parametr. Domyślnie jest null.