2012-04-03 4 views
0

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

My DB настроен так:

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, и я почти уверен, что делаю все неправильно, но понятия не имею, с чего начать.

UPDATE:

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

Это неподвижную все.

ответ

1

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

$homes = new Homes(); 

Должно быть

$homes = new Home(); 

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

+0

Я понял это после некоторого развития. Я все еще не могу получить результаты, которые мне нужны, но на данный момент я делаю предположение, что причиной этого является моя переменная '$ has_many'.Я могу получить единственный результат, но список связанных результатов не работает. – Seth

0

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

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

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

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

Смежные вопросы