提供了时间戳的自动写入
使用模型可以自动填充时间戳 如果不使用model,改用Db类需要手动填写
提供了搜索器
将常用查询条件封装到模型中去 减少查询代码的重复 假设订单(order)可以通过状态(status),订单号(order_numer),总价进行查询(total)
创建搜索器
public function searchOrderNumberAttr($query, $value, $data)
{
if (!empty($value)) {
$query->whereLike('order_number', "%$value%");
}
}
public function searchStatusAttr($query, $value, $data)
{
if ($value === 0 || $value === 1) {
$query->where('status', $value);
}
}
public function searchTotalAttr($query, $value, $data)
{
$query->where('total', $value);
}
使用搜索器
Order::withSearch(['order_number', 'status', 'total'], [
'order_number' => 'hello_world',
'status' => 1,
'total' => 2022,
])->find();
提供了模型关联
可以快速查询获取关联数据 进行一些简单的数据过滤(hasWhere)
模型的select返回的是think\model\Collection 对象
其中封装了很多常用方法 功能强大
$order = Order::where('status', 1)->select();
$order->each(function ($order) {
/**@var $order Order * */
echo $order->order_number . '<br/>';
});
提供了类型转换
以个人定制款式数据表为例,款式详情(order.style_info) 使用Db类操作的话,读取(json_decode),存入(json_encode)
DB类插入&读取
Db::name('order')->save([
'order_number' => 'order',
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
'style_info' => json_encode(['height' => 183]),
]);
$order = Db::name('order')->find(3);
dd(json_decode($order['style_info'], true));
使用模型类型转换
protected $type = [
'style_info' => 'array',
];
Order::create([
'order_number' => 'order_number_1',
'style_info' => ['height' => 183],
]);
$order = Order::find(3);
dd($order->style_info);
|