从两个表中查找结果时选择字段名称

时间:2010-12-08 14:59:54

标签: php sql cakephp cakephp-1.3

我有两个表(恰好在两个不同的数据库中)。 “客户”和“域”,客户可以有多个域。

这是我正在使用的代码:

$this->Domain->find('all', array(
    'order' => 'domain ASC',
    'fields' => array(
        'Domain.id',
        'Domain.domain',
        'Server.name',
        'Client.id',
        'Client.name'
    )
));

当我通过不使用'fields'=>返回所有字段时array()一切正常,只要我询问特定的字段,就说:

  

SQL错误:1054:未知列   “字段列表”中的“Client.id”

如果我只删除两个客户端列,那么一切也正常(客户端模型是另一个数据库上唯一的模型。

2 个答案:

答案 0 :(得分:0)

如果客户端hasMany域,那么应该像$this->Domain->find('all');那样调用模型显式传递字段Client.id将显示错误,因为它不是域表的一部分,使用{启用sql dumping {1}}并查看如何运行查询。

你的模特应该是

debug=2

这应该像这样工作

// in client.php model - having structure - id, name
$hasMany = 'Domain';

// in domain.php model - having structure - id, name, client_id
$belongsTo = 'Client';

答案 1 :(得分:0)

如果您的两张桌子位于不同的数据库中,那么您的生活真的很难。 AFAIK,Cake不支持在两个不同的数据库之间连接两个表(或强制关系)。为什么将客户端表放在单独的数据库中?

如果您无法移动表格,我认为您将不得不在您的域模型中编写一些自定义代码,以便它将使用域的(默认)数据库连接字符串,但将实例化并连接另一个数据库资源到另一个数据库。请参阅http://bakery.cakephp.org/articles/doze/2010/03/12/use-multiple-databases-in-one-app-based-on-requested-url了解如何操作 - 请跳至标题为“动态选择正确的数据库”的部分。

HTH, 特拉维斯