2

私はウェブサイトを作成しており、開発中にデータベース システムを 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 などの各フィールドを指定すると機能します。そのような質問がたくさんあるので、誰かが助けてくれれば、それは素晴らしいことです!

ありがとうございました!

4

1 に答える 1