2009-06-04 6 views
2

Ich versuche, einige Fixture-Daten für meine Komponententests in CakePHP (via SimpleTest) zu erstellen und habe keine Ahnung, wie ich mit meinen Fremdschlüsselbeziehungen umgehen soll. Hier ist ein Beispiel der Befestigung Code:Wie handhabe ich Fremdschlüsselbeziehungen in meinen Fixtures zum Komponententest mit SimpleTest in CakePHP?

<?php 
class SpecialtyFixture extends CakeTestFixture { 
    var $name = "Specialty"; 
    var $import = "Specialty"; 

    var $records = array(
      array(
       'id' => '1', 
       'event_id' => '1', 
       'code' => 'endocrin-1', 
       'name' => 'Endocrinology'), 
      array(
       'id' => '2', 
       'event_id' => '1', 
       'code' => 'ent-1', 
       'name' => 'Ear, Nose and Throat') 
    ); 
} 
?> 

So, wie Sie sich vorstellen können Specialty einen Fremdschlüssel Ereignis hat (mein Event-Modell sieht wie folgt aus):

<?php 
class Event extends AppModel { 
    var $name = "Event"; 
    var $primaryKey = "id"; 

    var $hasMany = array(
      'EventLocation' => array('className' => 'EventLocation'), 
      'Faculty' => array('className' => 'Faculty'), 
      'Agenda' => array('className' => 'Agenda'), 
      'Role' => array('className' => 'Role'), 
      'Specialty' => array('className' => 'Specialty'), 
    ); 

    var $hasAndBelongsToMany = array('User'); 
} 
?> 

Der Fehler Ich erhalte das ist:

Unexpected PHP error [<span style = "color:Red;text-align:left"><b>SQL Error:</b> 1054: Unknown column 'event_id' in 'field list'</span>] severity [E_USER_WARNING] in [/dev/trunk/cake/libs/model/datasources/dbo_source.php line 525] /dev/trunk/app/tests/cases/models/event.test.php -> EventTestCase -> endCase

ich werde mein Verständnis von CakePHP Fixturedaten ist minimal (Dokumentation irgendwie knapp ist, und Beispiele im Web alle etwas aufwärmen zugeben triviale Beispiele) also irgendwelche Ideen, was ich tun kann/sollte?

Antwort

3

Werfen Sie einen Blick auf die Fixturize shell von den guten Leuten bei Debuggable. Sobald Sie Daten in Ihrer Datenbank haben, können Sie diese Shell verwenden, um sie automatisch in Fixtures zu extrahieren. Spart eine Menge Kopfschmerzen.

Wie Sie, mein Wissen über Fixtures ist begrenzt, aber ich denke, dass Sie in der Lage sein würden, diese Art von Schmerz zu vermeiden, indem Sie etwas Solides in Ihrer Datenbank bekommen und das nur zu Fixtures extrahieren.

+0

Oooh fantastisch! Das ist genau das, wonach ich gesucht habe (ich würde die Daten lieber in Fixtures extrahieren). Danke! – leo