将简单查询转换为蛋糕查询?

Posted

技术标签:

【中文标题】将简单查询转换为蛋糕查询?【英文标题】:converting simple query to cake query? 【发布时间】:2010-06-22 12:16:18 【问题描述】:

实际上我有 1 个查询,但我无法将其转换为 Cakephp 查询格式。

$result = "select 
             * from esl_userresults
           where 
             esl_userresults.esl_songID = esl_lyrics.id 
             and esl_lyrics.song_name like '%".$esl_keyword."%'" ;

当我将此查询转换为 CakePHP 时,它会给出如下错误:

esl_userresults.esl_songID unknown column. 

【问题讨论】:

【参考方案1】:

您可以使用以下方法轻松地在蛋糕上运行直接 sql 查询: $this->Picture->query("SELECT * FROM Pictures LIMIT 2;"); (cake manual)

或者尝试类似的方法:

    $result = Esl_Userresults->find('all' , array('conditions' => array(
             "Esl_Userresults.esl_songID" => "Esl_Lyrics.id",
             "Esl_Lyrics.song_name LIKE" => '%'.$esl_keyword.'%'),
              'recursive' => 1)
              );

..假设您已正确链接 Esl_Userresults 和 Esl_Lyrics 模型。

【讨论】:

取决于 EslUserresults 和 EslLyrics 之间的关系。是一对多的吗?这实际上很简单。这里看看手册:book.cakephp.org/view/78/Associations-Linking-Models-Together【参考方案2】:

使用可包含行为而不是递归。它可以让您控制到单个字段级别。现在在早期使用它,以后会成为第二天性。

如果您对构建条件感到困惑,请在方法调用之外构建它。

尽量避免使用双引号,除非您需要包含转义或解析的数据 - 它们速度较慢。

$conditions = array(
    'EslUserresult.esl_songID' => 'EslLyric.id',
    'EslLyric.song_name LIKE' => '%'.$esl_keyword.'%'
                   )
$this->EslUserresult->contain('EslLyric.text');
$result = $this->EslUserresult->find('all',array('conditions'=>$conditions));

【讨论】:

【参考方案3】:

您可以使用AppModelquery()函数来运行SQL查询。

例如:$this->ModelName->query('SELECT * FROMtable'); 这将返回一个选定记录的数组。您可以传递简单查询以及复杂的连接查询。

【讨论】:

以上是关于将简单查询转换为蛋糕查询?的主要内容,如果未能解决你的问题,请参考以下文章

将多个简单查询转换为一个?

将 MySQL 简单查询转换为 SQL Server

如何将这个简单的Entity Framework查询转换为标准SQL查询?

不能从子查询将行转换为列

简单oracle 查询语句 转换为 mongo 查询语句

将 SQL 转换为 Linq 查询