CodeIgniter и DataMapper - PullRequest
       44

CodeIgniter и DataMapper

0 голосов
/ 03 апреля 2012

Я прочитал несколько разных постов здесь и не могу понять, что я делаю неправильно.

Моя БД настроена следующим образом:

homes
- id
- address_id
- price
- etc...

address
- id
- home_id
- address1
- address2
- etc...

Тогда мои модели выглядят так, сжато.

home.php
<?php
class Home extends DataMapper {
    public var $has_one = array('address');
}

address.php
<?php
class Address extends DataMapper {
    public var $has_one = array('home');
}

Тогда мой контроллер использует следующее:

homes.php
class Homes extends CI_Controller {
    public function __construct()
    {
        parent::__construct();
        $this->load->library('datamapper');
    }

    public function index() {
        $homes = new Homes();
        $homes->include_related('address');
        $homes->get_iterated();

        $this->output->enable_profiler(TRUE);

        _p($homes); // Self made function that wraps a print_r() in two <pre> tags.
}
}

Если я закомментирую эти две строки, я получу стандартный массив возврата CI.

$homes->include_related('address');
$homes->get_iterated();

Если нет, то я получаю ошибку сервера.Я впервые использую DataMapper и почти уверен, что делаю все неправильно, но понятия не имею, с чего начать.

ОБНОВЛЕНИЕ:

Я понялиз моей проблемы.Мне пришлось изменить таблицу БД address на addresses, и в моей address.php модели мне пришлось указать var $table = 'addresses';

Это исправило все.

Ответы [ 2 ]

1 голос
/ 04 апреля 2012

Да, вы можете указать имя таблицы в вашей модели. Также ваш пример был неверен:

$homes = new Homes();

Должно быть

$homes = new Home();

Обычно я переопределяю имя таблицы в своей модели, чтобы убедиться, что все в порядке.

0 голосов
/ 05 апреля 2012

Ваши отношения неправильные.Я предполагаю, что вы устанавливаете отношения один к одномуВ документе сказано: http://datamapper.wanwizard.eu/pages/relationtypes.html

Поскольку это отношение «один к одному», отношение могло храниться тремя способами:

  1. Как показано на рабочихtable.
  2. На таблице рабочих мест, как worker_id
  3. На выделенной таблице соединения worker_workplaces с идентификаторами столбцов, worker_id и workplace_id

Ноздесь вы добавили * address_id * в home и * home_id * в address .Вы должны выбрать между.Например, оставьте * home_id * в address и удалите * address_id * в home .

...