我正在创建一个网站,在开发过程中,我将数据库系统从 mysql 更改为 postgresql。现在一切似乎都很好,除非我想通过以下方式加入一个(或多个)表(没有 hasMany、hasOne 等):
$this->find('first', array(
'joins' => array(
array(
'table' => 'table_to_joins', // for instance 'foos'..
'alias' => 'TableToJoinJoin', // ..which implies 'FooJoin'
'type' => 'INNER',
'conditions' => array(
'TableToJoinJoin.a_field1 = CurrentTable.a_field2'
)
)
),
'conditions' => array(...),
'fields' => array('CurrentTable.*', 'TableToJoinJoin.*')
);
我得到错误:
Fatal error: Call to a member function schema() on a non-object in .../lib/Cake/Model/Datasource/Database/Postgres.php on line 405
问题是非对象是TableToJoinJoin。在 Postgres.php 中,代码是:
if (!preg_match('/^.+\\(.*\\)/', $fields[$i]) && !preg_match('/\s+AS\s+/', $fields[$i])) {
if (substr($fields[$i], -1) === '*') {
if (strpos($fields[$i], '.') !== false && $fields[$i] != $alias . '.*') {
$build = explode('.', $fields[$i]);
/* !! build[0] is TableToJoinJoin !! */ $AssociatedModel = $model->{$build[0]};
} else {
$AssociatedModel = $model;
}
/* line 405 */ $_fields = $this->fields($AssociatedModel, $AssociatedModel->alias, array_keys($AssociatedModel->schema()));
$result = array_merge($result, $_fields);
continue;
}
...
只有当我使用 TableToJoinJoin.* 时才会发生这种情况,如果我指定 TableToJoinJoin.id、TableToJoinJoin.foo 等每个字段,它就会起作用。我有很多这样的疑问,所以如果有人可以提供帮助,那就太好了!
谢谢!