首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CodeIgniter和DataMapper

CodeIgniter和DataMapper
EN

Stack Overflow用户
提问于 2012-04-03 00:13:14
回答 2查看 1.6K关注 0票数 0

我在这里读过几篇不同的文章,我不知道我做错了什么。

我的DB设置如下:

代码语言:javascript
复制
homes
- id
- address_id
- price
- etc...

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

然后我的模特们就像这样,浓缩了。

代码语言:javascript
复制
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');
}

然后,我的控制器使用以下内容:

代码语言:javascript
复制
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返回数组。

代码语言:javascript
复制
$homes->include_related('address');
$homes->get_iterated();

如果没有,那么我就会得到一个服务器错误。这是我第一次使用DataMapper,我几乎可以肯定我做错了一切,但不知道从哪里开始。

更新:

我解决了我的问题。我必须将DB表address更改为addresses,并且在我的address.php模型中必须指定var $table = 'addresses';

一切都修好了。

EN

回答 2

Stack Overflow用户

发布于 2012-04-04 08:07:24

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

代码语言:javascript
复制
$homes = new Homes();

应该是

代码语言:javascript
复制
$homes = new Home();

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

票数 1
EN

Stack Overflow用户

发布于 2012-04-05 09:25:27

你们的关系是错的。我猜你是在建立一对一的关系。医生说:http://datamapper.wanwizard.eu/pages/relationtypes.html

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

  1. ,如图所示,在workers表上.
  2. 在workplaces表上,在专用workers_workplaces联接表上为worker_id
  3. ,其中列为id、worker_id和workplace_id

但是这里您已经将*address_id*添加到homeaddress中的*home_id*中。你必须在这两者之间做出选择。例如,将*home_id*保存在address中,在home中删除*address_id*。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9985519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档