PHP头条
热点:

CakePHP从两个模型中获取数据


 今天学习了下cakephp中复杂条件查询,把尝试的一些成功和失败的代码总结了下!从手册“3.7.3.10 复杂条件查询”中,只是从一个模型中获取数据,所以尝试从两个模型中获取数据!

      首先简单说下模型关系:User和Note模型!关系参见Cakephp的Note项目数据结构笔记,数据结构为:2009-5-11 12-01-46

 

2009-5-11 12-01-46

查询目的:根据搜索关键字“an”查询用户,并查询用户所有包含关键字“an”的note!好的,让我们看看视图代码:


 

myAdvsearch
create("User",array('action'=>'search'));
	echo $form->input("q",array('label'=>'keywords:'));
	echo $form->end("search");
?>

users控制器中需要一个search方法:function search(){};要实现查询功能的代码就写在这个方法里面!以下先给大家看看要达到搜索所使用的sql语句!

SELECT *
FROM users
LEFT JOIN notes ON users.id = notes.user_id
WHERE users.name LIKE '%an%'
OR notes.subject LIKE '%an%'
LIMIT 0 , 30

那么我们使用了如下代码,是没有达到我们的目标的!请注意分析下段代码:

$results = $this->User->find('all',array(
	'conditions' => array('OR' => array('User.name LIKE' => '%'.$this->data['User']['q'].'%','Note.subject LIKE' => '%'.$this->data['User']['q'].'%'
))));

使用下列代码也没有成功!

$conditions = array(
'User.name LIKE'=>'%'.$this->data['User']['q'].'%'
		);
$results = $this->User->find('all',
	array(
		'conditions' => $conditions,
		'contain' => array(
			'Note' => array(
			'conditions' => array(
		'Note.subject LIKE'=>'%'.$this->data['User']['q'].'%',
				)
			)
		)
	));

最后,我们使用sql语句查询达到了我们的目标:

function search(){
		if($this->data['User']['q']){
			$sql = "SELECT * FROM users AS User " .
					"LEFT JOIN notes AS Note On User.id = Note.user_id " .
					"WHERE User.name LIKE '%an%' " .
					"OR " .
					"Note.subject LIKE '%an%' ";
			$results = $this->User->query($sql);
			$this->set('results',$results);
		}else{
			$this->set('results',null);
		}
	}

注意以上错误代码都写在if判断正确的语句块中!

www.phpzy.comtrue/phpkj/11247.htmlTechArticleCakePHP从两个模型中获取数据 今天学习了下cakephp中复杂条件查询,把尝试的一些成功和失败的代码总结了下!从手册“3.7.3.10 复杂条件查询”中,只是从一个模型中获取数据,所以尝试...

相关文章

相关频道:

PHP之友评论

今天推荐
name subject created