使用子查询转换为Cakephp查询

时间:2011-07-16 07:19:16

标签: cakephp subquery

有人知道如何转换此查询:

SELECT * from diminventory where partnumber ='350964-B22'或partnumber in(SELECT partnumber from dimparts where parentpartnumber ='350964-b22')

在cakephp查询中

由于

3 个答案:

答案 0 :(得分:0)

我还不是100%肯定你所要求的,但这里是关于cakephp查询的简短教程。

$this->ModelName->query("SELECT * FROM tablename LIMIT 2;");

您从模型中查询,但使用文字表名。您可以使用SQL“AS”关键字重命名结果数组的键。

示例结果:

Array
(
    [0] => Array
        (
            [tablename] => Array
                (
                    [id] => 1304
                    [user_id] => 759
                )
        )

    [1] => Array
        (
            [tablename] => Array
                (
                    [id] => 1305
                    [user_id] => 759
                )
        )
)

答案 1 :(得分:0)

他要求Cakephp查询而不是自定义SQL查询。在控制器中:

$partnumber = $this->diminventory->find('all',array('conditions' => array('diminventory.partnumber' => '350964-B22')));
$this->set('partnumber',$partnumber);

set function将变量作为$ partnumber传递给视图。然后是int视图(即.ctp文件),你需要输出数组。

foreach($partnumber as $partnumbers){
echo $partnumbers;
}

确保减少表在名称后面有's',否则它将无效,因为这是Cakephp严格命名约定的一部分。

查找功能教程: http://book.cakephp.org/view/1018/find

答案 2 :(得分:0)

要完全做蛋糕,你需要使用CakePHP subquery

$dbo = $this->User->getDataSource();
$subQuery = $dbo->buildStatement(
    array(
        'fields' => array('`Dimpart`.`partnumber`'),
        'table' => $dbo->fullTableName($this->Dimpart),
        'alias' => 'Dimpart',
        'conditions' => array('`Dimpart`.`parentpartnumber`' => '350964-b22'),
    ),
    $this->Dimpart
);

$subQuery = ' `DiminventoryEntry`.`partnumber` IN (' . $subQuery . ') ';
$subQueryExpression = $dbo->expression($subQuery);

$conditions[] = $subQueryExpression;
$conditions['DiminventoryEntry.partnumber'] = '350964-B22';

$result = $this->DiminventoryEntry->find('all', compact('conditions'));

Dimpart是表dimparts的模型,而DiminventoryEntry是表格diminventory的模型(实际上不是蛋糕,你应该重命名)你的表根据conventions)。