Laravel5.7从零开始(二)

数据迁移

Laravel 能使用原生 SQL、流畅的查询构造器,和 Eloquent ORM 在各种数据库后台与数据库进行非常简单的交互。当前 Laravel 支持四种数据库:

  • MySQL
  • PostgreSQL
  • SQLite
  • SQL Server

配置

数据库的配置文件放置在 config/database.php 文件中,你可以在这个文件中定义所有的数据库连接,并指定默认使用的数据库。数据库的链接配置放在 .env 文件中。

1
2
3
4
5
6
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

数据迁移

迁移就像是数据库的版本控制,允许团队简单轻松的编辑并共享应用的数据库表结构,如果你曾经手动在数据库结构中修改字段,如果项目其他环境又得重新修改一次,有了数据迁移就不再需要做这样的事情。

使用 Artisan 命令 make:migration 来创建迁移。

1
php artisan migrate

生成迁移

使用 Artisan命令 make:migration 来创建迁移:

1
php artisan make:migration create_projects_table

新的迁移位于 database/migrations 目录下。每个迁移文件名都包含时间戳,以便让 Laravel 确认迁移的顺序。

迁移类通常会包含2个方法: updownup 方法用于添加新的数据表, 字段或者索引到数据库, 而 down 方法是删除数据表。

下面我们简单创建字段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateProjectsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('projects', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->string('description');
$table->timestamps();
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('projects');
}
}

回滚迁移

若要回滚最后一次迁移, 可以使用 rollback 命令。 此命令将回滚最后一次“迁移”的操作:

1
php artisan migrate:rollback

php artisan migrate:rollback 命令会执行 down 方法,如果注释掉将不会回滚迁移

删除所有表并迁移

migrate:fresh 命令会从数据库中删除所有表:

1
php artisan migrate:fresh

总结

本节主要介绍数据库配置及迁移数据库命令操作:

  • php artisan make:migration create_projects_table # 生成迁移文件
  • php artisan migrate:rollback # 回滚迁移
  • php artisan migrate:fresh # 删除所有表并迁移

源码地址:戳这里

模型

现在我们已经了解了如何使用迁移类创建新的数据库表,现在让我们使用 Eloquent ORM 查询该数据。LaravelEloquent ORM 提供了漂亮、简洁方式来和数据库交互。每个数据库表都有一个对应的 Model 用来与该表交互。本节将快速了解一下基本命名空间和MVC工作流程。

定义模型

创建模型实例的最简单方法是使用 Artisan 命令 make:model

1
php artisan make:model Project

请注意,我们并没有告诉 EloquentProject 模型该使用哪一个数据表。除非数据表明确地指定了其它名称,否则将使用类的复数形式来作为表名。

使用tinker

Tinker 是一个 REPL (read-eval-print-loop)REPL 指的是一个简单的、可交互式的编程环境,通过执行用户输入的命令,并将执行结果直接打印到命令行界面上来完成整个操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
λ php artisan tinker
Psy Shell v0.9.9 (PHP 7.2.11 — cli) by Justin Hileman
>>> $project = new App\Project
=> App\Project {#2899}
>>> $project->title='iwanli'
=> "iwanli"
>>> $project->description='iwanli.me'
=> "iwanli.me"
>>> $project
=> App\Project {#2899
title: "iwanli",
description: "iwanli.me",
}
>>> $project->save()
=> true
>>>

命名空间

下面我直接复制PHP官方的对命名空间的阐述:

什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。

在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题:

  • 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
  • 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

MVC

MVC全名是ModelViewController,即模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范。

  • PagesController
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Project;
class PagesController extends Controller
{
public function home()
{
$projects = Project::all();

return view('welcome')->with(compact('projects'));
}

public function about()
{
return view('about');
}

public function news()
{
return view('news');
}
}
  • welcome.blade.php
1
2
3
4
5
6
7
8
9
10
11
@extends('layout')

@section('title', 'Laravel')

@section('content')
<ul>
@foreach($projects as $project)
<li>{{ $project->title.'---'.$project->description }}</li>
@endforeach
</ul>
@endsection

总结

本节快速了解了一下命名空间,定义模型,MVC工作流程及 Laravel Tinker 的使用。

源码地址:戳这里