MANY_MANY Tutorial

Hi, könnte jemand eine kleine Einführung in MANY_MANY Beziehungen hinsichtlich beim CREATE geben.

Ich verstehe noch nicht wie man in die Verknüpfungstabelle die Relationen erstellt.

Die Relationstabelle entspricht auch einem Model. So in der Art kann das aussehen.




$relationModel = new Relation();

$relationModel->userId = 1;

$relationModel->postId = 12;

$relationModel->save();



Car

id

name

CarDriver

carId

driverId

Driver

id

name

Ich erstelle für CAR und DRIVER je einen CONTROLLER und einen MODEL

In den Relations-Methode von CAR und DRIVER erstelle ich die Relationen.

Kann ich anschließend

$relationModel = new CarDriver();

$relationModel->driverId = 1;

$relationModel->carId = 2;

$relationModel->save();

ausführen???

(Bin grad auf der Arbeit, daher kann ich das nun nicht direkt ausführen)

Du erstellst auch ein Model für CarDriver.

In den Models "Car" und "Driver" erstellst du die Relationen in etwa so:




class Car extends CActiveRecord {

public function relations()

    {

        return array(

            'drivers'=>array(self::MANY_MANY, 'Driver', 'CarDriver(carid, driverid)'),

        );

    }

}



Mehr dazu unter: http://www.yiiframework.com/doc/guide/database.arr

Da die Relation auch nur eine Tabelle ist, kannst du sie genauso verwenden, wie ein anders Model. Instanz erstellen, Werte zuweisen und abspeichern.




class Car extends CActiveRecord {

public function relations()

    {

        return array(

            'drivers'=>array(self::MANY_MANY, 'Driver', 'CarDriver(carid, driverid)'),

            'car'=>array(self::MANY_MANY, 'Car', 'CarDriver(carid, driverid)'),

        );

    }

}



Wäre das nicht so "richtiger"?

Nein, da ein Car ja keinem Car zugeordnet ist. Die Relation sagt ja nur das ein "Car" mehrere "Driver" haben kann und eine "Driver" mehrere "Car"s.

Hi,

wir kontrolliert ist ob die Werte in der Verknüpfungstabelle eindeutig sind?

Ich habe der Verknüpfungstabelle einen UNIQUE - Key zugeordnet, jedoch kriege ich folgende verständliche Fehlermeldung wenn ich einen doppelten Wert eintrage.


CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '7-7' for key 'PRIMARY'

Wie löse ich das Problem am elegantesten?