参数绑定
    image.png


    视图查询
    如果需要快捷查询多个表的数据,可以使用视图查询,相当于在数据库创建了一个视图,但仅仅支持查询操作,例如:

    $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注入:
    image.png


    image.png
    image.png


    image.png