gpt4 book ai didi

php - 使用 finderQuery 的 CakePHP 2.3 模型关联适用于 Model->read() 但不适用于 Model->find()

转载 作者:太空宇宙 更新时间:2023-11-03 12:30:55 25 4
gpt4 key购买 nike

我几乎已经让 Cake 在这里做我想做的事了,但并不完全,我认为这是因为我的知识存在差距。

我已将英国邮政编码的数据库表导入到我的 cakePHP 应用程序中。这是结构:

CREATE TABLE IF NOT EXISTS `postcodes` (
`ref` varchar(6) NOT NULL DEFAULT '',
`area` varchar(50) NOT NULL DEFAULT '',
`uk_region` varchar(4) NOT NULL,
`lat` decimal(6,4) NOT NULL DEFAULT '0.0000',
`long` decimal(5,4) NOT NULL DEFAULT '0.0000',
PRIMARY KEY (`ref`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

这是 CSV 格式的表格中的一行。

"AB10","Aberdeen","SCOT","57.1350","-2.1170"

“帐户”和“订单”需要能够从“邮政编码引用”中查找这些详细信息

因此,环顾四周后,我在阅读这篇文章后想到了这个(我将只展示帐户模型)http://www.visuallizard.com/blog/2009/02/19/210 :

class Account extends AppModel {
public $hasOne = array('Postcode' =>
array(
'className' => 'Postcode',
'finderQuery' => 'SELECT Postcode.* FROM accounts, postcodes AS Postcode WHERE accounts.id = {$__cakeID__$} AND accounts.postcode_ref = Postcode.ref', 'foreignKey' => false
));

}

现在,如果我执行以下任一操作,其中“16”是测试帐户 ID:

$this->Account->read(null, 16);
$this->Account->find('first', array('conditions' => array('Account.id' => 16)));

检索数据一切正常。但是,如果我这样做:

$this->Account->find('all', array('conditions' => array('Account.id' => 16)));

我得到一个结果正确但有 2,821 次的数组;这是有多少个邮政编码条目。

将它从 $hasOne 更改为 $hasMany 也只返回一次结果,但它在 $result['Postcode'][0] 内,因为所有 hasMany 查询都是这样的,我相信这会影响我你们中的一些人可能会理解。

关于我在这里做了什么的任何线索?我是不是误解了什么或者这是 CakePHP 的错误?

最佳答案

您最好的选择是“扭转”关系;帐户 belongsTo 邮政编码。由于一个帐户只能有一个邮政编码,基本上它“属于”一个邮政编码,每个邮政编码(区域)可以有(包含)多个帐户。

您的帐户表中的 foreignKey 字段似乎已经有了正确的命名,但一定要将“ref”指定为邮政编码模型中的主键。关系将如下所示;

Account extends AppModel {
public $belongsTo = array(
// additional settings are probably not
// required because postcode_ref follows the
// CakePHP conventions, so foreignKey will
// automatically be detected
'Postcode',
);

}

和邮政编码模型:

Postcode extends AppModel {
// Important because of non-standard PK name
public $primaryKey = 'ref';


public $hasMany = array(
'Account',
);
}

这应该可以工作

关于php - 使用 finderQuery 的 CakePHP 2.3 模型关联适用于 Model->read() 但不适用于 Model->find(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15432312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com