Использование псевдонимного поля в ORM CodeIgniter DataMapper отношение многие-к-одному - PullRequest
4 голосов
/ 27 мая 2011

В настоящее время я моделирую веб-сайт, используя 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

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 апреля 2013

Я получаю ту же ошибку.Это было вызвано отсутствием parent::__construct() в конструкторе.

0 голосов
/ 23 июня 2011

попробуйте упомянуть "join_table" => "где и user, и form_data" другой мудрый datamapper будет искать это отношение в отдельной таблице с именем form_datas_users

и старайтесь избегать подчеркивания в именах таблиц, datamapper использует его во многих местах для внутренней идентификации отношений таблиц

...