CakePHP3使用表获取所有数据*

CakePHP3使用表获取所有数据*,php,mysql,cakephp,Php,Mysql,Cakephp,我正在使用cakePHP3查询生成器使用以下查询从两个表中获取记录,其中我需要表1中的所有列和表2中的选定列: $this->loadModel('Table1'); $Table1 = $this->Table1->find('all', array('fields' => array('Table1.*'),'conditions'=>$conditions,'order'=>array('Table1.id'=>'DESC')))->cont

我正在使用cakePHP3查询生成器使用以下查询从两个表中获取记录,其中我需要表1中的所有列和表2中的选定列:

$this->loadModel('Table1');
$Table1 = $this->Table1->find('all', array('fields' => array('Table1.*'),'conditions'=>$conditions,'order'=>array('Table1.id'=>'DESC')))->contain(['Table2']);
但是我得到了以下错误

Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS `Table1__*` FROM Table1 Table1 LEFT JOIN Table2 Table2 ON ' at line 1

我是CakePHP3新手。

假设表之间的关系正确

示例条件数组

$conditions = ['Table2.id' > 1];
从表中选择行

 $table1 = $this->Table1->find()->select(['Table1.*'])->where($conditions)->contain(['Table2'])->order(['Table1.id'=>'DESC'])->toArray();


这里有更多关于

为什么不使用查询生成器的信息

有很多方法可以做到这一点

$query= $this->Table1->find('all') 
    ->where($conditions)
    ->order(['Table1.id'=>'DESC'])
    ->contain(['Table2' => [
            'fields' => ['field1', 'field2']
        ]
    ]);


请参考正确的语法:
$this->Table1->find('all',array('joins'=>array(array)('table'=>'Table1','alias'=>'table','type'=>'internal','conditions'=>array('Table1.id=table2.id')),'conditions'=>$conditions,'fields'=>array('table1.*,'table2.field1,table2.field2'),)使用你的代码我得到了这个错误:
错误:SQLSTATE[42000]:语法错误或访问冲突:1064你的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解使用near'AS
Table1\uuuu*
、Table2.field1、Table2.field2 AS Table2\uuuu field1、Prod'的正确语法。在第1行
看起来CakePHP无法处理
*
,即使按照您的建议(@Jacek)更改了查询,我仍然会收到相同的错误!:(在这种情况下不需要,但是,
Table1
的所有字段都会被选择。听起来更像是OP在寻找限制容器的字段,即
Table2
@ndm。事实上,我使用了
select($this->Table1)
避免表2中的所有字段是的,但这会导致关联不包括在结果中,这没有太大意义;)据我所知,OP需要表2中的一些特定字段。是的,现在我发现我误读了这个问题,你可能是对的
$query= $this->Table1->find('all') 
    ->where($conditions)
    ->order(['Table1.id'=>'DESC'])
    ->contain(['Table2' => [
            'fields' => ['field1', 'field2']
        ]
    ]);
$query= $this->Table1->find('all') 
    ->select($this->Table1) // selects all the fields from Table1
    ->select(['Table2.field1', 'Table2.field2']) // selects some fields from Table2
    ->where($conditions)
    ->order(['Table1.id'=>'DESC'])
    ->contain(['Table2']);
$query= $this->Table1->find('all') 
    ->where($conditions)
    ->order(['Table1.id'=>'DESC'])
    ->contain(['Table2' => function($q) {
             return $q->select(['field1', 'field2']);
        }
    ]);