最近几天我一直在玩 cakephp,我正在尝试弄清楚不同数据源之间的关联是如何工作的。我一直在谷歌上搜索,但没有取得太大的成功。
例如,假设我有两个模型,一个将数据存储在 MySQL 数据库中,另一个将数据存储在 XML 文件中。他们都有 HABTM 设置相互链接。那么,当一个被搜索时,系统是如何连接两个数据源的,效率如何(即避免N+1问题)?
最近几天我一直在玩 cakephp,我正在尝试弄清楚不同数据源之间的关联是如何工作的。我一直在谷歌上搜索,但没有取得太大的成功。
例如,假设我有两个模型,一个将数据存储在 MySQL 数据库中,另一个将数据存储在 XML 文件中。他们都有 HABTM 设置相互链接。那么,当一个被搜索时,系统是如何连接两个数据源的,效率如何(即避免N+1问题)?
我刚刚使用 cake 3 遇到了类似的问题。
我正在使用 Postgres,我的数据位于不同的模式中,我将这些模式定义为不同的数据源。为了使关系工作,我必须为蛋糕添加表定义,以发出单独的查询来连接数据。
这是我的 AccountsTable 中的关系定义,它存储在 comp_x.accounts 中,属于存储在 public.banks 中的 Banks
$this->belongsTo('Banks', [
'foreignKey' => 'bank_id',
'strategy' => 'select' // this is the change I made
]);
这样,cake 会进行单独的查询以获取银行数据,而不是尝试在同一查询中加入不存在的表 comp_x.banks。
在您的问题中,您提到了 HABTM 关系。我相信它可能是相似的。关于效率,我没有什么要补充的,因为我还没有在大型数据集上测试过它。
它不是。当您创建一个relation
蛋糕时,您所做的就是构建 MySQL 获取数据所需的语言。
Cake 与这种关系如何等同于 MySQL 通常获取的实际数据无关。