2009-06-04 19 views
2

Je suis en train de créer des données de fixation pour mes tests unitaires dans CakePHP (via SimpleTest) et je ne sais pas comment gérer mes relations clés étrangères. Voici un exemple du code de fixation:Comment puis-je gérer les relations clés étrangères dans mes installations pour les tests unitaires avec SimpleTest 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') 
    ); 
} 
?> 

Donc, comme vous pouvez le deviner spécialisé a une clé étrangère à l'événement (mon modèle d'événement ressemble à ceci):

<?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'); 
} 
?> 

L'erreur que je reçois est la suivante:

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

Je reconnais ma compréhension des données de fixation CakePHP est minime (la documentation est un peu rare, et des exemples sur le web tout ressasser un peu exemples triviaux) donc des idées sur ce que je peux/dois faire?

Répondre

3

Jetez un oeil à la Fixturize shell par les bonnes gens débogable. Une fois que vous avez des données dans votre base de données, vous pouvez utiliser ce shell pour l'extraire automatiquement dans les appareils. Enregistre énormément de maux de tête.

Comme vous, ma connaissance des lieux est limité, mais je pense que vous seriez en mesure d'éviter ce genre de douleur en obtenant quelque chose de solide dans votre base de données et juste extraire que pour les appareils.

+0

Oooh fantastique! C'est exactement ce que je cherchais (je préférerais plutôt extraire les données aux appareils). Merci! – leo