为什么推荐优先使用模型(二)

提供了时间戳的自动写入

使用模型可以自动填充时间戳
如果不使用model,改用Db类需要手动填写

提供了搜索器

将常用查询条件封装到模型中去
减少查询代码的重复
假设订单(order)可以通过状态(status),订单号(order_numer),总价进行查询(total)

创建搜索器

    # Order模型中 添加搜索器
    # 命名规则 search + 搜索器名称(首字母大写) + Attr
    # $data 是 通过 model::withSearch($fields,$data) 传入的$data
    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);
    }

使用搜索器

        # 通过 model::withSearch($fields,$data) 使用搜索器 给模型带上搜索条件
        # $data 对应搜索器中传入的$data
        # SELECT * FROM `order` WHERE `order_number` LIKE '%hello_world%' AND `status` = 1 AND `total` = 2022 LIMIT 1
        Order::withSearch(['order_number', 'status', 'total'], [
            'order_number' => 'hello_world',
            'status' => 1,
            'total' => 2022,
        ])->find();
提供了模型关联

可以快速查询获取关联数据
进行一些简单的数据过滤(hasWhere)

模型的select返回的是think\model\Collection 对象

其中封装了很多常用方法
功能强大

        # model 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类插入&读取

        # 插入款式数据 需要主动json_encode()
        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]),
        ]);

        # 取出 需要主动json_decode()
        $order = Db::name('order')->find(3);
        dd(json_decode($order['style_info'], true));

使用模型类型转换

    # 在模型中声明,这里在Order模型中
    # 声明类型转换
    # 字段 => 字段类型
    # 模型新增和修改会自动转换数据类型
    # 以style_info 为例
    # 读取时将数据库中的类型转换成array
    # 新增时传入array类型转换成数据库中的类型
    protected $type = [
        'style_info' => 'array',
    ];
    
    # 使用
    # 创建不需要手动json_encode
    Order::create([
        'order_number' => 'order_number_1',
        'style_info' => ['height' => 183],
    ]);

    # 读取不需要手动json_decode
    $order = Order::find(3);
    dd($order->style_info);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值