将简单查询转换为蛋糕查询?
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】:您可以使用AppModel
的query()
函数来运行SQL查询。
例如:$this->ModelName->query('SELECT * FROM
table');
这将返回一个选定记录的数组。您可以传递简单查询以及复杂的连接查询。
【讨论】:
以上是关于将简单查询转换为蛋糕查询?的主要内容,如果未能解决你的问题,请参考以下文章