向Larvel 5进军5
初涉模型(Models)
laravel默认生成了一个User.php模型,路径是App/User.php
更好的体会MVC的含义,在App目录下新建一个目录Models
,把User.php
移到
App/Models/User.php,再使用全局替换:把项目newproject下的所有的App\User
替换成App\Models\User
.以上操作在phpstorm中是这么实现的:
在newproject目录上右键选择Replace in Path,然后替换即可,这里是解决名字空间引用的问题。
创建模型
- 如果我们要自己手动创建一个模型文件,最简单的方式是通过 make:model 来创建。需要注意的一点是,模型类名称使用 单数 形式来命名:
php artisan make:model SampleModel
- 如果生成模型的时候同时创建迁移文件,使用
-m
选项即可
php artisan make:model SampleModel -m
- 如果不加命名空间,默认创建的模型文件会在
App
目录下,因此最佳实践应该指定命名空间:
php artisan make:model Models/SampleModel -m
此命令会将模型文件创建在App/Models下并生成迁移文件.
为了理解模型文件的基本内容,先看一下laravel自动生成的User.php模型文件:
<?php
namespace App\Models;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
可以看到,把Illuminate\Foundation\Auth\User
作为Authenticatable
引用后,User模型中的User
类是基于Authenticatable
生成的一个新类,这样User模型就自动具备了laravel自带的一些权限功能。Notifiable
是消息提醒类,暂时不用管。可以看到,User类中有个属性,理解一下:$fillabel 是为了防止注入攻击,比如有的用户可能在表单中注入了一些别的信息更改数据库中的其他内容,因此我们要定义哪些数据是