【问题标题】:Cakephp SQL error with join and fields带有连接和字段的 Cakephp SQL 错误
【发布时间】:2013-11-15 20:02:39
【问题描述】:

我正在创建一个网站,在开发过程中我将数据库系统从 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 等每个字段,它就会起作用。我有很多这样的疑问,所以如果有人可以提供帮助,那就太好了!

谢谢!

【问题讨论】:

    标签: php sql cakephp join orm


    【解决方案1】:

    我也遇到了同样的问题。经过反复试验,我发现如果我在模型中映射关系(通过 $belongsTo、$hasMany 等),则连接将正常工作。次优,但仅此而已。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多