ActiveRecord mit zusammengesetzten PK

Hallo Community,

ich bin mir nicht so ganz sicher, ob mir hier überhaupt jemand helfen kann. :slight_smile: Aber ich versuche es trotzdem mal.

Seit Tagen suche ich nach der Lösung meines Problem. Und nun bin ich wohl schon ziemlich nah dran. Ich denke, dass es mit dem Primary Key (PK) meiner Tabelle zusammen hängt. Er setzt sich aus einem Foreign Key (FK) und einem timestamp zusammen. Nun scheint es mir aber so, als könnte yii keine Active Records behandeln, die einen zusammengesetzten Primärschlüssel haben. Zumindest finde ich immer wieder nur Methoden wie diese: $model->findByPk(10), welche darauf schließen lassen, dass der PK nur eine Spalte hat.

Wäre super, wenn ihr hier kurz euren Senf dazu geben könntet, damit ich einen Schritt weiter komme.

Danke und Grüße

Zebra

Hi,

Versuch mal das:

für die finder methoden müsste laut (http://www.yiiframework.com/doc/api/1.1/CDbCommandBuilder/#createPkCriteria-detail) das möglich sein:




ModelClass::model()->findByPk(array('fk_field'=>2,'timeStamp'=>$timestamp)); 



Ausserdem kannst du die primaryKey() methode deines models auch überschreiben welche ja normalerweise nur ein Feld (meistens "id") zurückgibt und ein array "returnen" (kling schon wie Schwarzenegger nach all den Posts auf Englisch :wink: ):




public function primaryKey()

{

    return array('fk_field','timestamp_field');

}



Hoff es hilft,

Hannes

Danke, ich werde das gleich mal versuchen.

Ich verstehe nur nicht, wieso das GII nicht für mich macht, wenn ich das Model schon automatisch anlege. :slight_smile: Also das mit der primaryKey-Methode meine ich. Es erkennt ja scheinbar die PKs beim Erstellen, legt aber keine Methode dafür an. :slight_smile:

Danke

Das wurde schon öfter mal diskutiert. Der Grund dürfte (so hab ichs verstanden) sein, dass eine Automatisierung dieser Dinge den Framework Code verkomplizieren würde und diese Fälle im Endeffekt selten genug vorkommen um dem Entwickler die Arbeit aufbürden zu können. Ob das stimmt (Beispiel crosstables bei many_many relations) sei dahingestellt, aber es wird sich in 1.x. nicht mehr ändern und wenn mans weiß is es auch halb so wild.

Grüße aus Wien,

Hannes

Muss ich eigentlich auch noch in der relations-Methode (in den anderen Models) bekannt geben, dass dieses Model/diese Tabelle einen PK aus mehreren Columns nutzt? Oder werden dort nur die FKs eingetragen?