ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 定义模型与其属性 ### [](https://octobercms.com/docs/database/model#defining-models)定义模型 在大多数情况下,应该为每个数据库表创建一个模型类。所有模型类都必须扩展`Model`该类。插件内部使用的模型的最基本表示如下: ~~~ namespace Acme\Blog\Models; use Model; class Post extends Model { /** * The table associated with the model. * * @var string */ protected $table = 'acme_blog_posts'; } ~~~ 该`$table`保护字段指定相应的模型数据库表。表名称是作者,插件和复数记录类型名称的蛇形名称。 ### [](https://octobercms.com/docs/database/model#standard-properties)支持的属性 除了[模型特征](https://octobercms.com/docs/database/traits)提供的那些标准属性外,还可以在模型上找到一些标准属性。例如: ~~~ class User extends Model { protected $primaryKey = 'id'; public $exists = false; protected $dates = ['last_seen_at']; public $timestamps = true; protected $jsonable = ['permissions']; protected $guarded = ['*']; } ~~~ | 属性 | 描述 | | --- | --- | | **$primaryKey** | 用于标识模型的主键名称。 | | **$incrementing** | 布尔值,如果为false表示主键不是递增的整数值。 | | **$exists** | 布尔值,如果为true表示模型存在。 | | **$dates** | 提取后,这些值将转换为Carbon / DateTime对象的实例。 | | **$timestamps** | 布尔值,如果为true,将自动设置created\_at和Updated\_at字段。 | | **$jsonable** | 值在保存之前被编码为JSON,并在获取后转换为数组。 | | **$fillable** | 值是可进行[批量分配的](https://octobercms.com/docs/database/model#mass-assignment)字段。 | | **$guarded** | 值是防止[质量分配的](https://octobercms.com/docs/database/model#mass-assignment)字段。 | | **$visible** | 值是[序列化模型数据](https://octobercms.com/docs/database/serialization)时显示的字段。 | | **$hidden** | 值是[序列化模型数据](https://octobercms.com/docs/database/serialization)时隐藏的字段。 | | **$connection** | 包含默认情况下模型使用的[连接名称的](https://octobercms.com/docs/database/basics#accessing-connections)字符串。 | #### [](https://octobercms.com/docs/database/model#property-primary-key)首要的关键 模型将假定每个表都有一个名为的主键列`id`。您可以定义一个`$primaryKey`属性以覆盖此约定。 ~~~ class Post extends Model { /** * The primary key for the model. * * @var string */ protected $primaryKey = 'id'; } ~~~ #### [](https://octobercms.com/docs/database/model#property-incrementing)增量式 模型将假定主键是一个递增的整数值,这意味着默认情况下,主键将自动转换为整数。如果您希望使用非增量或非数字主键,则必须将public`$incrementing`属性设置为false。 ~~~ class Message extends Model { /** * The primary key for the model is not an integer. * * @var bool */ public $incrementing = false; } ~~~ #### [](https://octobercms.com/docs/database/model#property-timestamps)时间戳记 默认情况下,模型将期望`created_at`和`updated_at`列存在于你的表。如果您不希望自动管理这些列,请将`$timestamps`模型上的属性设置为`false`: ~~~ class Post extends Model { /** * Indicates if the model should be timestamped. * * @var bool */ public $timestamps = false; } ~~~ 如果需要自定义时间戳的格式,请`$dateFormat`在模型上设置属性。此属性确定日期属性在数据库中的存储方式,以及将模型序列化为数组或JSON时的格式: ~~~ class Post extends Model { /** * The storage format of the model's date columns. * * @var string */ protected $dateFormat = 'U'; } ~~~ #### [](https://octobercms.com/docs/database/model#property-jsonable)值存储为JSON 将属性名称传递给`$jsonable`属性后,值将作为JSON从数据库中序列化和反序列化: ~~~ class Post extends Model { /** * @var array Attribute names to encode and decode using JSON. */ protected $jsonable = ['data']; } ~~~