1.模型在thinkphp5.0的mvc中定位:数据库操作,并将数据验证的部分分离出去了。模型一般都是与数据库的表一一对应的, 模型的名称采用大驼峰命名,在获取实际的数据表的时候,自动转化为小写+下划线命名的数据表名称,如果模型的名称与表名没有一一对应起来,那么在模型中 设置属性table 或者name;
也可以针对单个模型配置,单独不同的数据库连接参数
'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'test',
// 数据库用户名
'username' => 'root',
// 数据库密码
'password' => '',
// 数据库连接端口
'hostport' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'think_',
// 数据库调试模式
'debug' => true,
];
}
2、基础操作
2.1、新增数据
nickname = '流年';$user->email = '[email protected]';$user->birthday =strtotime('1977-03-05');
$user->save();
}
}
默认情况下,实例化模型后执行save操作都是执行的数据库insert操作,如果你希望执行update操作,可以在在调用save方法之前调用isUpdate方法
isUpdate()->save();//update 操作
如果你觉得一个个给模型赋值太麻烦了,你也可以改用下面的操作
nickname . ':' . $result->id . ' ]新增成功';
2.2、批量新增数据
'李三','email'=>'[email protected]'],
['nickname'=>'李四','email'=>'[email protected]'] ]
$user->saveAll($list);
}
2.3、查询单条数据
nickname
echo $user->email;
}
模型的get方法用于获取数据表的数据,并返回当前的模型对象实例,通常传入主键作为参数
与Db类的find方法区别:Db类的find方法返回是数组,而模型get方法查询返回的是当前的模型对象的实例
如果不是根据主键来查询的,可以将条件传入
'流年'])
echo $user->nickname; echo $user->email;
}
如果根据email等单一字段条件查询
public function read(){
$user=UserModel::getByEmail('[email protected]');
echo $user->nickname;
echo $user->email;
}
也可以使用查询构建器来完成
find();
echo $user->nickname;
echo $user->email;
}
2.4、查询多条数据
如果是查询多条数据,可以使用all方法
如果不是使用主键查询,可以传入数组条件查询,如下
1]);
}
也可以使用查询构建器完成条件查询
select();
}
2.5、更新数据
nickname ='李四';
$user->email = '[email protected]';
$user->save();
}
默认情况下,查询模型数据后返回的模型实例执行save方法,都是执行数据库update操作,如果你需要执行save方法是执行数据库的insert操作,可以在save方法调用调用之前调用isUpdate方法
$user->isUpdate(false)->save();
也可以直接调用update方法,执行数据更新操作
2.6、删除数据
直接传入主键,调用destroy方法
public function delete(){
$result = UserModel::destroy($id);
}
也可以调用查询构造器
public function delete(){
$user = UserModel::where('id',1)->delete();
}
2.7、读取器和修改器
一般在读取数据库某些数据,例如时间戳读取的时候,时常要进行格式化,如果每次读取数据后,都要需要进行处理就显得非常麻烦,那么tp5.0模型提供了读取器,在读取的数据的会自动进行格式化,使用如下
那么我们每次读取birther这个字段的时候就会自动格式化。
如果我们将birther储存到数据库,一般将接受的2016-5-2日期转为时间戳,再储存到数据库
那么tp5.0提供了修改器,将接收到的birther日期格式转为时间戳格式,使用如下
2.8、类型转换
正对前面的birther读取器和修改器,可以进一步的简化如下:
'timestamp',
]
}
对于简单的数据格式转换之类的处理,设置类型转换比定义修改器和读取器更加方便
tp5.0类型转换支持:integer 、float、boolean、array,json、object、datetime、timestamp、serialize;
2.9、自动时间戳和自动完成
实际开发,数据库表中要保存的记录添加时间、修改时间,tp5.0提供自动时间戳机制,只需在数据库配置文件中将
'auto_timestamp'=>true,
那么数据库就会在数据库create_time、update_time两个字段自动写入时间戳(默认时间戳)、如果表中不是用这两个作为字段名、那么可以在模型中进行设置
'timestamp:Y/m/d',
];
protected $createTime = 'create_at';
protected $updateTime = 'update_at';
}
如果数据库保存这两个字段的格式不是时间戳,而是datetime格式,那么我们需要在模型中设置
'timestamp'];
protected $autoWritetimeStamp = 'datetime';
}
如果全局的时间戳都是统一的,也可以直接在数据库配置文件中 直接
'auto_timestamp'=>'datetime'
如我们需要自动写入其它的字段、那么我们需要在模型中进行设置
'timestamp:Y/m/d',
];
protected $insert = ['status'=>1]; //自动写入status =1;
}
除了insert属性外,还支持auto(新增、更新)、update属性(仅更新时写入);
2.10验证
tp5.0将验证器与模型进行分开设置
验证器(位于application/index/validate/User.php)命名与模型名保持一致,内容如下
进行验证
// 新增用户数据
public function add()
{
$user = new UserModel;
if ($user->allowField(true)->validate(true)->save(input('post.'))) {
return '用户[ ' . $user->nickname . ':' . $user->id . ' ]新增成功';
} else {
return $user->getError();//返回验证错误提示信息
}
}
也可以在控制器进行验证
validate($data,'User');
if (true !== $result) {
return $result;
}
$user = new UserModel;
// 数据保存
$user->allowField(true)->save($data);
return '用户[ ' . $user->nickname . ':' . $user->id . ' ]新增成功';
}
}
助手函数 validate静态方法可以正对单个字段进行验证
Validate::is('值','验证规则');
欢迎加入laravel技术交流群 :784030154