我在这里读过几篇不同的文章,我不知道我做错了什么。
我的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,我几乎可以肯定我做错了一切,但不知道从哪里开始。
更新:
我解决了我的问题。我必须将DB表address更改为addresses,并且在我的address.php模型中必须指定var $table = 'addresses';
一切都修好了。
发布于 2012-04-04 08:07:24
是的,您可以在模型中指定表名。你的例子也是错误的:
$homes = new Homes();应该是
$homes = new Home();我通常在模型中重新定义表名,以确保一切正常。
发布于 2012-04-05 09:25:27
你们的关系是错的。我猜你是在建立一对一的关系。医生说:http://datamapper.wanwizard.eu/pages/relationtypes.html
因为这是一对一的关系,所以这种关系可以通过三种方式存储:
但是这里您已经将*address_id*添加到home和address中的*home_id*中。你必须在这两者之间做出选择。例如,将*home_id*保存在address中,在home中删除*address_id*。
https://stackoverflow.com/questions/9985519
复制相似问题