ThinkPHP5中find()和select()区别
读取数据是指读取数据表中的一行数据(或者关联数据),主要通过find方法完成,例如:
1
2
3
4
|
$User = M( "User" ); // 实例化User对象 // 查找status值为1name值为think的用户数据 $data = $User ->where( 'status=1 AND name="thinkphp"' )->find(); dump( $data ); |
find方法查询数据的时候可以配合相关的连贯操作方法,其中最关键的则是where方法,如何使用where方法我们会在查询语言章节中详细描述。
如果查询出错,find方法返回false,如果查询结果为空返回NULL,查询成功则返回一个关联数组(键值是字段名或者别名)。 如果上面的查询成功的话,会输出:
1
2
3
4
|
array (size=3) 'name' => string 'thinkphp' (length=8) 'email' => string 'thinkphp@gmail.com' (length=18) 'status' => int 1 |
即使满足条件的数据不止一个,find方法也只会返回第一条记录(可以通过order方法排序后查询)。
还可以用data方法获取查询后的数据对象(查询成功后)
1
2
3
4
|
$User = M( "User" ); // 实例化User对象 // 查找status值为1name值为think的用户数据 $User ->where( 'status=1 AND name="thinkphp"' )->find(); dump( $User ->data()); |
读取数据集
读取数据集其实就是获取数据表中的多行记录(以及关联数据),使用select方法,使用示例:
1
2
3
|
$User = M( "User" ); // 实例化User对象 // 查找status值为1的用户数据 以创建时间排序 返回10条数据 $list = $User ->where( 'status=1' )->order( 'create_time' )->limit(10)->select(); |
如果查询出错,select的返回值是false,如果查询结果为空,则返回NULL,否则返回二维数组。
$about=M('document'); $abouts=$about->where('id=2')->select(); $abouts2=$about->where('id=2')->find(); var_dump($abouts); var_dump($abouts2);
输出结果:
array (size=1) 0 => array (size=24) 'id' => string '2' (length=1) 'uid' => string '1' (length=1) 'name' => string '' (length=0) 'title' => string '公司简介' (length=12) 'category_id' => string '39' (length=2) 'group_id' => string '0' (length=1) 'description' => string '公司简介公司简介公司简介公司简介公司简介公司简介公司简介公司简介公司简介公司简介公司简介公司简介公司简介' (length=156) 'root' => string '0' (length=1) 'pid' => string '0' (length=1) array (size=24) 'id' => string '2' (length=1) 'uid' => string '1' (length=1) 'name' => string '' (length=0) 'title' => string '公司简介' (length=12) 'category_id' => string '39' (length=2) 'group_id' => string '0' (length=1) 'description' => string '公司简介公司简介公司简介公司简介公司简介公司简介公司简介公司简介公司简介公司简介公司简介公司简介公司简介' (length=156) 'root' => string '0' (length=1) 'pid' => string '0' (length=1)
从上面的代码可以看出,find()返回一个一维数组,select()返回一个二维数组,所以在取值时有所不同,一维数组取值用$data["id"],二维数组取值用$data[0]["id"],由于一开始没了解这个用法,调试一天也取不值,最后有var_dump()方法才看到两个方法的不同所在!
$about=M('document'); $abouts=$about->where('id=2')->select(); $abouts2=$about->where('id=2')->find(); // var_dump($abouts); // var_dump($abouts2); if($abouts){ $article = M('document_article'); //$info = $article->find($abouts['id']); $info=$article->where('id='.$abouts2['id'])->find(); } $this->assign('wzjj',$info);