views:

294

answers:

1

Hey all -

I'm trying to create some fixture data for my unit tests in CakePHP (via SimpleTest) and I have no idea how to handle my foreign key relationships. Here's a sample of the fixture code:

<?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, as you can guess Specialty has a foreign key to event (my Event model looks like this):

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

The error I'm getting is this:

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

I'll admit my understanding of CakePHP fixture data is minimal (documentation is kinda scarce, and examples on the web all rehash somewhat trivial examples) so any ideas on what I can/should do?

TIA -

+2  A: 

Take a look at the Fixturize shell by the good folks at Debuggable. Once you have data in your database, you can use this shell to extract it into fixtures automatically. Saves an awful lot of headache.

Like you, my knowledge of fixtures is limited, but I think you'd be able to avoid this kind of pain by getting something solid in your database and just extracting that to fixtures.

Rob Wilkerson
Oooh fantastic! This is exactly what I was looking for (I'd much rather extract the data to fixtures). Thanks!
leo