I'm currently modeling out a website using the DataMapper ORM for CodeIgniter. At the moment, I have a users
table that has all the standard user information, including an id, and a form_data
table that has its own id and a field called created_by
which links to the id
column on the users
table. To put it more simply, users-form_data is a one-to-many relationship. My DataMapper models look like this:
User
class user extends DataMapper {
var $has_many = array(
'form_data_created_by' => array(
'class' => 'form_data',
'other_field' => 'created_by'
)
);
}
...and more, of course, but edited here for brevity
And my form_data model looks like this:
class form_data extends DataMapper {
var $table = 'form_data';
var $has_one = array(
'form_type',
'created_by' => array(
'class' => 'user',
'other_field' => 'form_data_created_by'
)
);
}
Now here's the thing. When I run this code:
$form_type = new form_type();
$form_data = $form_type->where('app_id', $app_id)->get()->form_data->get()->all_to_array();
It throws an error that is something like this:
Severity: Warning
Message: Invalid argument supplied for foreach()
Filename: datamapper/array.php
Line Number: 53
And when I echo out the JSON of the $form_data object, I get this:
{"id":1,"form_type_id":"3","create_date":"1306241597","created_by":[],"status":"a"}
Notice how created_by
is an empty array? The column in my table is definitely called created_by
. The odd thing is that when I change this column to user_id
and change the form_data
class to have this:
var $has_one = array('form_type', 'user');
...and change the user
class to have this:
var $has_many = array('form_data') //among others
Everything works perfectly, and I get the right value for user_id
.
So can anyone prod me in the right direction? I've been using this page as a guide: http://datamapper.wanwizard.eu/pages/advancedrelations.html
Thanks
I was getting same error. It was caused by lack of parent::__construct()
in constructor.
try to mention a "join_table"=>"where both user and form_data are" other wise datamapper will look for this relation in a separate table named form_datas_users
and try to avoid underscores in table names, datamapper uses it at so many places to identify tables relation internally
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.