只讀字段用來保護某些特殊的字段值不被更改,這個字段的值一旦寫入,就無法更改。 要使用只讀字段的功能,我們只需要在模型中定義`readonly`屬性:
~~~
<?php
namespace app\model;
use think\Model;
class User extends Model
{
protected $readonly = ['name', 'email'];
}
~~~
例如,上面定義了當前模型的`name`和`email`字段為只讀字段,不允許被更改。也就是說當執行更新方法之前會自動過濾掉只讀字段的值,避免更新到數據庫。
下面舉個例子說明下:
~~~
$user = User::find(5);
// 更改某些字段的值
$user->name = 'TOPThink';
$user->email = 'Topthink@gmail.com';
$user->address = '上海靜安區';
// 保存更改后的用戶數據
$user->save();
~~~
事實上,由于我們對`name`和`email`字段設置了只讀,因此只有`address`字段的值被更新了,而`name`和`email`的值仍然還是更新之前的值。
支持動態設置只讀字段,例如:
~~~
$user = User::find(5);
// 更改某些字段的值
$user->name = 'TOPThink';
$user->email = 'Topthink@gmail.com';
$user->address = '上海靜安區';
// 保存更改后的用戶數據
$user->readonly(['name','email'])->save();
~~~
>[danger] 只讀字段僅針對模型的更新方法,如果使用數據庫的更新方法則無效,例如下面的方式無效。
~~~php
$user = new User;
// 要更改字段值
$data['name'] = 'TOPThink';
$data['email'] = 'Topthink@gmail.com';
$data['address'] = '上海靜安區';
// 保存更改后的用戶數據
$user->where('id', 5)->update($data);
~~~
- 簡介
- 數據庫配置
- 分布式數據庫
- 查詢構造器
- 查詢數據
- 新增數據
- 更新數據
- 刪除數據
- 鏈式操作
- Where
- Table
- Alias
- Field
- Strict
- Limit
- Page
- Order
- Group
- Having
- Join
- Union
- Distinct
- Lock
- Cache
- Comment
- FetchSql
- Force
- Partition
- Replace
- FailException
- Extra
- Duplicate
- Sequence
- Procedure
- View
- 聚合查詢
- 分頁查詢
- 時間查詢
- 高級查詢
- 子查詢
- 原生查詢
- 事務操作
- 存儲過程
- 查詢事件
- JSON字段
- 模型
- 定義
- 新增
- 更新
- 刪除
- 查詢
- 查詢范圍
- 只讀字段
- JSON字段
- 自動時間寫入
- 獲取器
- 修改器
- 搜索器
- 類型轉換
- 模型輸出
- 模型事件
- 虛擬模型
- 關聯
- 一對一關聯
- 一對多關聯
- 遠程一對多
- 遠程一對一
- 多對多關聯
- 多態一對多
- 多態一對一
- 關聯預載入
- 關聯統計
- 關聯輸出
- SQL監聽
- 緩存機制
- 字段緩存
- 查詢緩存
- 擴展
- 自定義查詢類
- 自定義數據庫驅動