请问,前台传递值 "true" ,后台在保存成 1 的时候除了使用修改器,还有什么比较好的方法吗?

Laravel能自动转换 "true" 和 "false" 为 1 和 0 吗?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 7

casts

4年前 评论
风铃 (楼主) 4年前

属性类型转换
使用示例中给出的 boolean 转换即可满足,数据库存整型,取用是直接当做布尔值

$query->where('is_admin', true)
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * 这个属性应该被转换为原生类型.
     *
     * @var array
     */
    protected $casts = [
        'is_admin' => 'boolean',
    ];
}
4年前 评论
风铃 (楼主) 4年前
lddtime (作者) 4年前
风铃 (楼主) 4年前
lddtime (作者) 4年前
largezhou 4年前
风铃 (楼主) 4年前
翟宇鑫

存储 truefalse ,字段设置为 string,强制转换传值数据:(boolean) $request->input('field_name'');不知是否可行...

4年前 评论

如果存入数据1-0 是不是要比true false 字段更小?直接存1-0 前台 true false 岂不是更好

4年前 评论

可在 model 类中监听保存事件 protected static boot () ... static::saving();
还可以把字段类型定义为 tinyint(1)model 类中定义属性 $casts

4年前 评论

这事,,,我觉得还是前端处理比较好,也规范一点,,,或者你可以放到中间件里处理这个,,类似自带的 TrimStringsConvertEmptyStringsToNull 都是用来处理请求中数据的中间件。

你可以参考下,这 2 个中间件,都继承自 TransformsRequest,就是用来处理这种事的,,,

4年前 评论
AloneUtopia

一般我会在后端准备好一份配置文件,并且和前端约定好,专门用于处理这种东西。

比如处理通用的状态

配置文件:

class TransMapConf
{
    //通用状态
    const Status = [
        'disable' => [
            'value' => 0,
            'name' => '不可用'
        ],
        'enable' => [
            'value' => 1,
            'name' => '可用'
        ]
    ];
    ..........................
}

以及相应的转换方法

//将前端传的"disable" / "enable"  转换为0 / 1对应到数据库
$status = getTransMapValue(TransMapConf::Status, $status);

//将数据库的 0 / 1  转换为"disable" / "enable"返回给前端
$status = getTransMapKey(TransMapConf::Status, $status);
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!