Integrity constraint violation: 1062 Duplicate entry am elegantesten lösen?

Hi,

wie checkt ihr beim Speichern ob ein Datensatz in einer Verknüpfungstabelle schon vorhanden ist?

Integrity constraint violation: 1062 Duplicate entry

Schlechte, aber funktionierende Lösung im Controller:


$model->id = 5;

if(Model::model()->findByPk(5) !== false) {

$model->save();

} else {

echo 'Error: Entry already exists';

}

Oder. Noch besser, du setzt eine RULE im model:


public function accessRules() {

 return array( array('id', 'unique', ...) )

Siehe CUniqueValidator

ich baue einen Importer der die Werte dann einfach überspringen soll

Wird hier dann eine Fehlermeldung geworfen? Würde doppelt Einträge einfach ignorieren und mit der Abarbeitung fortsetzen

Ja es wird eine Fehlermeldung geworfen. "Variabel ist schon vorhanden " wird dann ausgegeben. Aber der Eintrag wird dann nicht Ignoriert es wird dann einfach nicht gespeichert.

Aber das was er oben geschrieben hat ist die Falsche Methode




public function rules()

	{

		// NOTE: you should only define rules for those attributes that

		// will receive user inputs.

		return array(

			array('user, email', 'required'),

			array('', 'unique'),

			// The following rule is used by search().

			// Please remove those attributes that should not be searched.

			array('user, email', 'safe', 'on'=>'search'),

		);

	}



Das wäre dann die richtige Methode

accessRules hat was mit denn Rechten für die Views zutun.