0

我在这里阅读了一些不同的帖子,但我无法弄清楚我做错了什么。

我的数据库设置如下:

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';

这解决了一切。

4

2 回答 2

1

是的,您可以在模型中指定表名。你的例子也是错误的:

$homes = new Homes();

应该

$homes = new Home();

我通常在我的模型中重新定义表名以确保一切正常。

于 2012-04-04T08:07:24.353 回答
0

你的关系是错误的。我假设您正在设置一对一的关系。文档说: http ://datamapper.wanwizard.eu/pages/relationtypes.html

因为这是一对一的关系,所以该关系可以以三种方式存储:

  1. 如图所示,在工人桌子上。
  2. 在工作场所表上,作为 worker_id
  3. 在专用的workers_workplaces 连接表上,包含id、worker_id 和workplace_id 列

但是在这里,您已将 *address_id* 添加到home并在address中添加*home_id* 。你必须在开之间做出选择。例如,在address中保留 *home_id* 并在home中删除 *address_id* 。

于 2012-04-05T09:25:27.707 回答