В настоящее время я моделирую веб-сайт, используя DataMapper ORM для CodeIgniter. На данный момент у меня есть таблица users
, которая содержит всю стандартную информацию о пользователе, включая идентификатор, и таблицу form_data
, которая имеет свой собственный идентификатор, и поле с именем created_by
, которое ссылается на столбец id
на таблица users
. Проще говоря, users-form_data - это отношение один ко многим. Мои модели DataMapper выглядят так:
Пользователь
class user extends DataMapper {
var $has_many = array(
'form_data_created_by' => array(
'class' => 'form_data',
'other_field' => 'created_by'
)
);
}
... и многое другое, конечно, но для краткости отредактировано здесь
И моя модель form_data выглядит так:
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'
)
);
}
Теперь вот в чем дело. Когда я запускаю этот код:
$form_type = new form_type();
$form_data = $form_type->where('app_id', $app_id)->get()->form_data->get()->all_to_array();
Выдает ошибку, которая выглядит примерно так:
Severity: Warning
Message: Invalid argument supplied for foreach()
Filename: datamapper/array.php
Line Number: 53
И когда я повторяю JSON объекта $ form_data, я получаю это:
{"id":1,"form_type_id":"3","create_date":"1306241597","created_by":[],"status":"a"}
Обратите внимание, как created_by
является пустым массивом? Столбец в моей таблице определенно называется created_by
. Странно то, что когда я изменяю этот столбец на user_id
и меняю класс form_data
, чтобы он имел:
var $has_one = array('form_type', 'user');
... и измените класс user
таким образом:
var $has_many = array('form_data') //among others
Все отлично работает, и я получаю правильное значение для user_id
.
Так кто-нибудь может подтолкнуть меня в правильном направлении? Я использовал эту страницу в качестве руководства: http://datamapper.wanwizard.eu/pages/advancedrelations.html
Спасибо