现在让我们照例先来创建一个新分支。
$ git checkout master
$ git checkout -b modeling-users
所有创建的迁移文件都被统一放在 database/migrations 文件夹里。打开该文件夹我们可以看到,Laravel 已默认为我们创建好了三个迁移文件:
database/migrations/2014_10_12_000000_create_users_table.phpdatabase/migrations/2014_10_12_100000_create_password_resets_table.phpdatabase/migrations/2019_08_19_000000_create_failed_jobs_table.php
vi database/migrations/2014_10_12_000000_create_users_table.php
当我们运行迁移时,up 方法会被调用;当我们回滚迁移时,down 方法会被调用。
我们需要运行下面的命令来生成执行迁移,migrate 命令会执行所有未被执行过的迁移。
php artisan migrate
Laravel 默认为我们生成了用户模型文件,代码如下所示:
app/User.php
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
Notifiable 是消息通知相关功能引用,
Authenticatable 是授权相关功能的引用。
在 Eloquent 模型中借助对 table 属性的定义,
来指明要进行数据库交互的数据库表名称,在用户模型中,
我们对应要交互的数据库表为 users,因此定义的代码如下:
protected $table = 'users';
Laravel 在用户模型中默认
为我们添加了 fillable 在过滤用户提交的字段,
只有包含在该属性中的字段才能够被正常更新:
protected $fillable = [
'name', 'email', 'password',
];
最后,
当我们需要对用户密码或其它敏感信息
在用户实例通过数组或 JSON 显示时进行隐藏,
则可使用 hidden 属性:
protected $hidden = [
'password', 'remember_token',
];
使用 App\Models 命名空间
Laravel 为我们默认创建的模型文件放置在 app 文件夹下,为了让新手能够更好理解 MVC 模式的开发流程,本教程中将统一使用 app/Models 文件夹来放置所有的模型文件。现在让我们先来创建一个 app/Models 文件夹,并将 User.php 文件放置到其中。
$ mkdir app/Models
$ mv app/User.php app/Models/User.php
在执行完这一步的操作之后,我们还需要执行下面这两个操作:
1、修改 User.php 文件,更改 namespace 为我们新创建的文件夹路径:
app/Models/User.php
<?php
namespace App\Models;
2、编辑器全局搜索 App\User 替换为 App\Models\User,先在 Sublime Text 中可使用快捷键 shift + cmd(ctrl) + f 搜索下总共有几处需要修改:
$ vi app/Http/Controllers/Auth/RegisterController.php
$ vi config/auth.php
$ vi database/factories/UserFactory.php
因为上面的文件改动较大,因此我们需要进行一次 Git 提交,该改动的代码进行保存。
$ git add -A
$ git commit -m "Move user model to models folder"
现在让我们将代码切回到主分支中进行合并。
$ git checkout master
$ git merge modeling-users
//----------以下操作 仅作演示用------------------
Article 模型的例子
模型文件可通过多种方式进行创建,下面让我们以文章模型(Article)为例,为你讲解模型文件的创建。
一般情况下,如果我们要自己手动创建一个模型文件,最简单的方式是通过 make:model 来创建。需要注意的一点是,模型类名称使用【 单数 】 形式来命名
$ php artisan make:model Models/Article
模型默认是放置在 app 文件夹下,
因遵循 MVC 的最佳实践而需要把模型文件放置于 app/Models 目录下
同时创建迁移文件
如果需要在创建模型的同时顺便创建数据库迁移,则可以使用 --migration 或 -m 选项,让我们将刚刚生成的模型进行删除,尝试生成迁移文件:
$ rm app/Models/Article.php
$ php artisan make:model Models/Article -m
Model created successfully.
Created Migration: 2018_12_12_090551_create_articles_table
Eloquent 表命名约定#
在该文件中,Eloquent Article 模型默认情况下会使用类的「下划线命名法」与「复数形式名称」来作为数据表的名称生成规则。如:
Article 数据模型类对应 articles 表;
User 数据模型类对应 users 表;
BlogPost 数据模型类对应 blog_posts 表;
『约定优于配置』能极大提高开发效率,并且也更有利于团队协作。Laravel 项目中大量的使用了
『约定优于配置』这种设计范式,这也是 Laravel 的另一个可爱之处。
$ vi app/Models/Article.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
protected $table = 'my_articles';
}
如果你需要指定自己的数据表,
则可以通过 table 属性来定义,如上
收拾舞台
由于我们刚刚创建的文章模型仅作演示用,因此我们无需对这几个文件的更改进行保存,可通过下面命令进行移除:
$ git add -A
$ git checkout -f
创建用户对象
首先让我们使用此命令进入 Tinker 环境:
$ php artisan tinker
如果中途想要退出 Tinker,可使用 ctrl + c 快捷键。
通过下面命令我们可以很轻松的创建一个用户对象:
>>> App\Models\User::create(['name'=> 'Summer', 'email'=>'summer@example.com','password'=>bcrypt('password')])
在以上命令中,
我们使用 App\Models\User Eloquent 模型提供的 create 方法,
通过传入一个关联数组来新建一个用户对象。
在我们对用户的 password 进行赋值时,
调用了一个叫 bcrypt 的方法,
将 password 的值进行加密。
在前面的章节中我们学过,当使用了 use 对类进行引用之后,便可以对类进行直接调用。为了让
接下来的命令可读性更高,我们使用 use 来引用 App\Models\User Eloquent 模型类:
>>> use App\Models\User
这样我们就可以在后面的操作中直接调用 User 而不是完整的类名 App\Models\User
>>> User::find(1)
User::first()
User::all()
假如我不想通过 id 查询表,想通过 email 查询又该如何写呢?
User::where(['email'=>'aufree@yousails.com'])->first()
更新用户对象
在用户创建成功之后,我们还可以对用户信息进行更新。有两种方式可以完成用户的更新操作:
第一种是通过给用户对象属性进行赋值,赋值成功后再调用 save 方法进行保存更新;
第二种则是直接调用 update 方法进行更新。
首先,让我们将用户对象从数据库中取出,并赋值给 user 变量。
>>> $user = User::first()
通过 save 方法更新
让我们使用属性赋值更新的方法对用户名进行更新,将其名字更改为 Monkey:
>>> $user->name = 'Monkey'
这时,新的用户名已赋值成功,但是 尚未 保存到数据库,因此查看用户信息时我们能够看到,用户名显示的还是之前的 Summer。
让我们来调用 save 方法对用户信息进行保存。
>>> $user->save()
通过 update 方法更新
>>> $user->update(['name'=>'Summer'])
如何修改时区?
https://learnku.com/laravel/t/17027
config/app.php
'timezone' => env('TIME_ZOME', 'UTC')
config/database.php
.
.
.
'mysql' => [
'driver' => 'mysql',
'timezone' => env('DB_TIMEZONE','+00:00'),
.
.
.
]
.env 配置文件里加入
TIME_ZOME=PRC
DB_TIMEZONE=+08:00
https://learnku.com/laravel/t/42186
$temp = User::first();
$temp->save()
$temp
取出第一条数据,紧接着将它存储。故并不会数据修改。
现在让我们将代码切回到主分支中进行合并。
$ git checkout master
$ git merge modeling-users