参数绑定
视图查询
如果需要快捷查询多个表的数据,可以使用视图查询,相当于在数据库创建了一个视图,但仅仅支持查询操作,例如:
$result = Db::view(‘user’,’id,name,status’)
->view(‘profile’,[‘name’=>’truename’,’phone’,’email’],’profile.user_id=user.id’)
->where(‘status’,1)
->order(‘id desc’)
->select();
dump($result);
生成的SQL语句为:
SELECT user.id,user.name,user.status,profile.name AS truename,profile.phone,profile.email FROM think_user user INNER JOIN think_profile profile ON profile.user_id=user.id WHERE user.status = 1 order by user.id desc
<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
// birthday读取器
protected function getBirthdayAttr($birthday)
{
return date(‘Y-m-d’, $birthday);
}
}
这里,我们添加了一个getBirthdayAttr读取器方法用于读取User模型的birthday属性的值,该方法会在读取birthday属性值的时候自动执行。
读取器方法的命名规范是:
get + 属性名的驼峰命名+ Attr
如果控制器类继承了think\Controller的话,可以做如下简化调用:
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function hello($name = ‘World’)
{
// 获取当前URL地址 不含域名
echo ‘url: ‘ . $this->request->url() . ‘
‘;
return ‘Hello,’ . $name . ‘!’;
}
}
闭包查询
find和select方法可以直接使用闭包查询:
$result = Db::name(‘data’)->select(function ($query) {
$query->where(‘name’, ‘like’, ‘%think%’)
->where(‘id’, ‘in’, ‘1,2,3’)
->limit(10);
});
dump($result);
生成的SQL语句是:
SELECT * FROM think_data
WHERE name
LIKE ‘%think%’ AND id
IN (‘1’,’2’,’3’) LIMIT 10
原生的sql代码,要注意防止sql注入: