Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从两个表中查找结果时选择字段名_Php_Sql_Cakephp_Cakephp 1.3 - Fatal编程技术网

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

Php 从两个表中查找结果时选择字段名,php,sql,cakephp,cakephp-1.3,Php,Sql,Cakephp,Cakephp 1.3,我有两个表,它们恰好位于两个不同的数据库中。客户端和域,客户端可以有多个域 这是我正在使用的代码: $this->Domain->find('all', array( 'order' => 'domain ASC', 'fields' => array( 'Domain.id', 'Domain.domain', 'Server.name', 'Client.id', 'Cli

我有两个表,它们恰好位于两个不同的数据库中。客户端和域,客户端可以有多个域

这是我正在使用的代码:

$this->Domain->find('all', array(
    'order' => 'domain ASC',
    'fields' => array(
        'Domain.id',
        'Domain.domain',
        'Server.name',
        'Client.id',
        'Client.name'
    )
));
当我通过不使用“fields”=>数组返回所有字段时,一切正常,只要我请求特定字段,它就会显示:

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

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

如果客户机有许多域,那么您的模型应该像$this->Domain->find'all'那样调用;显式传递字段Client.id将显示错误,因为它不是domains表的一部分,请使用debug=2启用sql转储,并查看查询是如何运行的

你应该是

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

// in domain.php model - having structure - id, name, client_id
$belongsTo = 'Client';
应该是这样的

$this->Domain->recursive = 1;
$data = $this->Domain->find('all');
// $data = Array ( 'Domain' => ********, 'Client' => ****** )

如果您的两个表位于不同的数据库中,那么您的生活将变得非常困难。另外,Cake不支持连接两个表或强制两个不同数据库之间的关系。为什么要将客户机表放在单独的数据库中

如果无法移动表,我认为您必须在域模型中编写一些自定义代码,这样它将使用域的默认db连接字符串,但将实例化另一个db资源并将其连接到另一个数据库。请参阅,了解如何执行此操作-跳到标题为“动态选择正确的数据库”的部分

嗯,,
Travis

他说他的两个表域和客户端在不同的数据库中-我认为他的问题在于试图跨越不同的数据库。但是它允许我使用列Server.name,它是另一个表的一部分?我将它们放在另一个数据库中,因为我从另一个网站借用它们,我不希望有任何重复。通过使用:var$useDbConfig='anotherdb',我设法让多个数据库正常工作;是的,但是我认为你不能改变查询中间的dBCONFIG VAR,对吧?看起来您仍然需要创建一个自定义的find方法。另一种方法是在另一个数据库表上创建一个触发器。在创建/更新/删除时,触发它以镜像其他数据库中的数据。我对多个数据库没有问题,在模型中更改$useDbConfig可以正常工作。我遇到的问题是能够选择我返回的列以加快速度。当我从clients表中请求列时,它说它们不存在。对,这是因为find方法通常不会从单独的数据库中提取,这是您试图对查询执行的操作。您需要重写您的模型::find,以便它能够做到这一点。我仍然建议将所有内容放在一个数据库中;除非有一个非常令人信服的理由,否则它会让你的生活轻松很多。为什么不把你的蛋糕应用程序表添加到你其他网站的数据库中呢?您可以随时根据需要在以后删除它们。