制作模型
模型创建
模型类必须扩展 Illuminate\Database\Eloquent\Model
。模型的默认位置是/app
目录。
Artisan 命令可以轻松生成模型类 :
php artisan make:model [ModelName]
这将默认在 app/
中创建一个新的 PHP 文件,名为 [ModelName].php
,并将包含新模型的所有样板,其中包括基本设置所需的类,命名空间和使用。
如果要与模型一起创建迁移文件,请使用以下命令,其中 -m
还将生成迁移文件:
php artisan make:model [ModelName] -m
除了创建模型之外,还会创建一个连接到模型的数据库迁移。默认情况下,数据库迁移 PHP 文件位于 database/migrations/
中。默认情况下,这不包括 id 和 created_at
/ updated_at
列以外的任何内容,因此你需要编辑该文件以提供其他列。
请注意,你必须运行迁移(一旦设置了迁移文件),以便模型从项目根目录使用 php artisan migrate
开始工作
此外,如果你希望稍后在创建模型后添加迁移,则可以通过运行以下命令来执行此操作:
php artisan make:migration [migration name]
比如说你想为你的猫创建一个模型,你有两个选择,无论有没有迁移就可以创建。如果你已经有猫表或者此时不想创建一个表,则可以选择创建不迁移。
对于此示例,我们要创建迁移,因为我们还没有表,因此将运行以下命令。
php artisan make:model Cat -m
此命令将创建两个文件:
- 在 App 文件夹中:
app/Cat.php
- 在数据库文件夹中:
database/migrations/timestamp_creat_cats_table.php
我们感兴趣的文件是后者,因为正是这个文件我们可以决定我们希望表格看起来像和包含什么。对于任何预定义的迁移,我们都会获得一个自动递增的 id 列和一个时间戳列。
下面的迁移文件摘录示例包括上面的预定义列以及添加猫的名称,年龄和颜色:
public function up()
{
Schema::create('cats', function (Blueprint $table) {
$table->increments('id'); //Predefined ID
$table->string('name'); //Name
$table->integer('age'); //Age
$table->string('colour'); //Colour
$table->timestamps(); //Predefined Timestamps
});
}
因此,你可以看到为表创建模型和迁移相对容易。然后,要执行迁移并在数据库中创建它,你将运行以下命令:
php artisan migrate
这会将任何未完成的迁移迁移到你的数据库。
模型文件位置
借助 PSR4, 模型可以存储在任何地方。
默认情况下,模型在 app
目录中创建,名称空间为 App
。对于更复杂的应用程序,通常建议将模型存储在对应用程序体系结构有意义的结构中的自己的文件夹中。
例如,如果你有一个使用一系列水果作为模型的应用程序,你可以创建一个名为 app/Fruits
的文件夹,并在此文件夹中创建 Banana.php
(保持 StudlyCase 命名约定),然后你可以在 App\Fruits
名称空间中创建 Banana 类:
namespace App\Fruits;
use Illuminate\Database\Eloquent\Model;
class Banana extends Model {
// Implementation of "Banana" omitted
}
型号配置
Eloquent 遵循约定优于配置方法。通过扩展基础 Model
类,所有模型都继承下面列出的属性。除非被覆盖,否则以下默认值适用:
属性 | 描述 | 默认 |
---|---|---|
protected $connection |
数据库连接名称 | 默认数据库连接 |
protected $table |
表名 | 默认情况下,类名转换为 snake_case 并复数。例如,SpecialPerson 变成了 special_people |
protected $primaryKey |
表 PK | id |
public $incrementing |
指示 ID 是否自动递增 | true |
public $timestamps |
指示模型是否应加时间戳 | true |
const CREATED_AT |
创建时间戳列的名称 | created_at |
const UPDATED_AT |
修改时间戳列的名称 | updated_at |
protected $dates |
除了 timestamps 属性之外,应该更改为 DateTime 的属性 | [] |
protected $dateFormat |
将保留日期属性的格式 | 当前 SQL 方言的默认值。 |
protected $with |
与模型的 eagerload 的关系 | [] |
protected $hidden |
模型序列化中省略了属性 | [] |
protected $visible |
模型序列化中允许的属性 | [] |
protected $appends |
属性访问器添加到模型序列化 | [] |
protected $fillable |
可批量分配的属性 | [] |
protected $guarded |
从质量分配中列入黑名单的属性 | [*] (所有属性) |
protected $touches |
保存时应该触及的关系 | [] |
protected $perPage |
分页返回的模型数。 | 15 |
Version >= 5
属性 | 描述 | 默认 |
---|---|---|
protected $casts |
应该转换为本机类型的属性 | [] |