2012-04-03 44 views
0

我已閱讀了幾個不同的帖子,我無法弄清楚我做錯了什麼。CodeIgniter和DataMapper

我的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:

我想通了,我的問題。我只好到數據庫表更改addressaddresses,在我address.php模型我必須指定var $table = 'addresses';

這一切固定。

回答

1

是的,你可以在模型中指定表名。另外你的例子是錯誤的:

$homes = new Homes(); 

應該

$homes = new Home(); 

我通常我的模型中重新定義的表名,以確保一切都很好。

+0

我經過一番發展才意識到這一點。我仍然無法得到我所追求的結果,但在這一點上,我假設我的'$ has_many'變量是造成這種情況的原因。我可以得到一個結果,但相關結果列表不起作用。 – Seth 2012-04-04 17:13:26

0

你的關係是錯誤的。我假設你正在設置一對一的關係。該文檔說: http://datamapper.wanwizard.eu/pages/relationtypes.html

因爲這是一對一的關係,這種關係可能已被存儲在三個方面:

  1. 如圖所示,在職工表。
  2. 在工作場所表,worker_id
  3. 在專用workers_workplaces連接表,擁有ID,worker_id和workplace_id

但在這裏你已經添加* ADDRESS_ID *到和* home_id *在地址。 你必須選擇。例如,在地址中保留* home_id *,並在首頁中刪除* address_id *。