企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] `php artisan make:model User` 会发现Model already exists! 在app\User.php发现里面之前有个User.php这是他的一个示例文件,把这文件删除 删除之后再创建,然后建个Model文件夹,把创建好的user.php移动到这里,改下命名空间 默认表是表示模型的复数 # 表名和Model类名的关系 ## 默认表名 默认情况下,系统会猜测类名的复数为表名,比如: * 类名 ->表名 * User ->users类名的复数,便是表名 * UserAvatarAttachment ->user_avatar_attachments 多个单词,类名每个单词的首字母大写,表名会自动加上下划线,并在结尾加上复数 * Media ->mediamedia 没有复数 * Factory ->factories识别元音,转换-ies * Woman ->women特殊单词的复数也可以正常识别,还有man、leaf等 Laravel 中有一套完善的单词复数转换程序,在大部分情况下,都能得到单词的正确复数 无意义的单词,会按照常规,在末字母加上-s、-es或-ies ## 指定表名 protected $table \= 'customer'; # 字段白名单、黑名单 ## 字段黑名单(写入) 如果你不希望数据库中插入id(因为id是自增量) `protected $guarded = ['id'];` 这样,creat、update、save等方法都会过滤这个字段的写入 ~~~ User::create([ 'id' => 25, //会自动过滤这项 'username' => 'dick', ]) ~~~ >Model默认配置$guarded = ['*']表示拒绝所有字段的写入 ## 关闭黑名单 Model默认启用黑名单 ~~~ protected static $unguarded = true; //关闭 或 User::$unguarded = true; ~~~ ## 字段白名单(写入) `protected $fillable = ['username', 'password'];` 白名单一般配合$`guarded = ['*']`来使用。在全黑名单的情况下,设置某些字段为白名单 # 数据隐藏或显示 数据隐藏(读取时) 如果希望在输出数据时,不显示password、token等字段 `protected $hidden = ['password','token'];` 这样在`toArray()、toJson()`时,会自动去除这些数据 注意:`$user->password、$user['password']` 可正常使用,仅仅在`toArray()、toJson()`时过滤这些数据 数据显示 当`$hidden = ['*']`时,可启用 `protected $visible = ['username','gender'];` # 附加字段/数据 Model 可以自创一些字段来增加程序的可用性。 注意:这些字段是不会插入数据库的 ~~~ class Role extends Model { protected $appends = ['is_admin']; public function getIsAdminAttribute() { return $this->getKey() == 99; } } $role = Role::find(99); echo $role->is_admin; //true $appends 也可以结合 $hidden/$visible 用 ~~~ # 数据库连接 不要忘记在配置文件中.env更改连接数据库的一些值 测试连接数据库,注意要在DB前面加\ ~~~ $pdo=\DB::connection()->getPdo(); dd($pdo); $rel = DB::connection('mysql_read')->where(...)->update(...); ~~~ 也可以在模型中指定数据库连接: `public $connection = 'mysql_read';` ## 指定查询时连接数据库 您也可以指定在执行 Eloquent 查询时要使用哪个数据库连接。只要使用`on`方法: ~~~ $user = User::on('connection-name')->find(1); ~~~ 如果您在使用`读取 / 写入`连接, 您可以通过如下命令来强制查询使用`写入`连接: ~~~ $user = User::onWriteConnection()->find(1); ~~~ # 中间表类型转换 Laravel 5.5 新增了向中间表模型插入或者更新数据时对类型转换的支持。 目前,在原来的模型中你可以用`$casts`来双向转换。任何继承`Eloquent\Model`类的模型都会查找`$casts`属性,并在读取和写入时将指定的属性转化为数据类型 ~~~ protected $casts = [ 'email_verified_at' => 'datetime', ]; ~~~ 在 Laravel 5.4 中,Taylor 也在自定义中间表模型上添加了定义`$casts`属性的功能,但是只在读取数据时应用了`$casts`,而插入或更新属性时并不会执行转换