ThinkPHP 模型高级

Read

查询操作应当静态调用,更新和删除操作则动态调用

// 查询单个记录
$this->where('name', 'thinkphp')->find();
// 调用动态查询方法
$this->getByName('thinkphp');
// 查询数据集
$this->where('id', '>', 0)->limit(10)->order('id desc')->select();
// 删除数据
$this->where('status', 0)->delete();

查询范围

namespace app\index\model;

use think\Model;

class User extends Model{

    // email查询
    protected function scopeEmail($query){
        $query->where('email', '[email protected]');
    }

    // status查询
    protected function scopeStatus($query){
        $query->where('status', 1);
    }

	// 全局查询范围:每次查询的时候自动调用
	protected static function base($query){
        // 查询状态为1的数据
		$query->where('status', 1);
    }
	// 临时关闭全局查询范围
	User::useGlobalScope(false)->get(1);

}

// 使用
$users = User::scope('email,status')->all();
// 生成
SELECT * FROM `user` WHERE `email` = '[email protected]' AND `status` = 1 

字段过滤

// 获取当前用户对象
$user = User::get(request()->session('user_id'));

// 只允许更新用户的nickname和address数据
$user->allowField(['nickname', 'address'])
    ->data(requst()->param(), true)
    ->save();

如果仅仅是希望去除数据表之外的字段,可以使用
// 只允许更新数据表字段数据
$user->allowField(true)
    ->data(requst()->param(), true)
    ->save();

//在模型中设置后,不必每次都调用allowField方法
class User extends Model{
    protected $field = ['name', 'nickname', 'email', 'address'];
}

只读字段

//在更新的时候自动忽略
class User extends Model{
    protected $readonly = ['name','email'];
}


发布了37 篇原创文章 · 获赞 1 · 访问量 757

猜你喜欢

转载自blog.csdn.net/yuhezheg/article/details/103451919