作者: douyasi
网站:http://douyasi.com/category/startlaravel/
备注:本教程是在当前最新Laravel稳定版v4.2.X下实现的,其它相异版本如果有问题请自行排除。
本文为作者原创记录,转载请保留署名与来源。
Laravel
框架自带数据库建立与迁移工具,使用 php artisan
可以很方便建立或迁移数据库。
下面简单说下本cms数据库结构。
实现本cms需要用到多张表,为了加快教程,我们先把最主要的2张表(某些扩展或关联字段也有可能被省去)——管理用户表 admin
和文章表article
拿出来操作。
其它表,诸如文章分类表,文章标签表,系统设置配置表等一律略去。
admin
表:
字段名 | 类型 | 备注说明 |
---|---|---|
id | int | 管理用户ID(自增) |
username | varchar | 管理用户名,用于登录 |
password | varchar | 管理用户密码 |
article
表:
字段名 | 类型 | 备注说明 |
---|---|---|
id | int | 文章ID(自增) |
title | varchar | 文章标题 |
content | text | 文章内容 |
slug | varchar | 文章缩略名 |
命令行终端里输入以下命令:
php artisan migrate:install
执行之后,会发现目标数据库里多出了 {prefix}_migrations
的表, {prefix}
对应你数据库设置的表前缀。
接着我们执行下面语句:
php artisan migrate:make create_admin_table
php artisan migrate:make create_article_table
执行之后,我们发现在
/app/database/migrations
下多出带日期时间前缀的create_admin_table.php
和create_article_table.php
文件。
先打开
create_admin_table.php
文件,添加以下代码:
public function up()
{
Schema::create('admin', function(Blueprint $table)
{
$table->increments('id');
$table->string('username',20)->index();
$table->string('password',60);
$table->softDeletes(); //软删除
/*使用softDeletes,表中会多出timestamp类型
的'deleted_at'字段*/
$table->timestamps(); //时间戳
/*使用timestamps,表中会多出timestamp类型
的'created_at'和'updated_at'字段*/
});
}
public function down()
{
Schema::drop('admin');
}
再打开
create_article_table.php
文件,添加以下代码:
public function up()
{
Schema::create('article', function(Blueprint $table)
{
$table->increments('id');
$table->string('title',120)->index();
$table->text('content');
$table->string('slug',60)->nullable();
$table->softDeletes();
$table->timestamps();
});
}
public function down()
{
Schema::drop('article');
}
保存完毕之后我们继续运行命令:
php artisan migrate
会提示你是否执行此命令,输入y回车,之后如果看到下文就说明数据库建立成功了。
**************************************
* Application In Production! *
**************************************
Do you really wish to run this command? y
Migrated: 2014_10_11_060945_create_admin_table
Migrated: 2014_10_11_061004_create_article_table
Laravel
可以简单的使用 seed
类填充测试数据到数据库。所有的 seed
类放在 app/database/seeds
目录下。可以使用任何您想要的类名称,但是应该遵守某些大小写规范,如 UserTableSeeder
之类。默认已经有一个 DatabaseSeeder
类。
当然你也可以使用Laravel第三方包或插件(比如 way/generators
、 fzaninotto/faker
)来管理和填充填充数据。我也推荐大家使用 generators
和 faker
来进行数据库填充,这里连载文章定位于 Laravel
入门教程,以贴近官方帮助手册为准,故不再赘述,可具体参考下这篇博文教程。
我们手动在seed
目录下建立2个seeder
文件,位于 /app/database/seeds/AdminTableSeeder.php
文件代码:
<?php
class AdminTableSeeder extends Seeder {
public function run()
{
DB::table('admin')->delete();
Admin::create(
array(
'username' => 'admin',
'password' => Hash::make('123456'),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
//'created_at' => Carbon::now()->toDateTimeString(),
//'updated_at' => Carbon::now()->toDateTimeString(),
/*使用Carbon需在app/config/app.php下注册ClassAliases*/
));
}
}
注:使用时间处理的
Carbon
扩展包需要在/app/config/app.php
配置Class Aliases,不然无法识别。
'aliases' => array(
'App' => 'Illuminate\Support\Facades\App',
'Artisan' => 'Illuminate\Support\Facades\Artisan',
'Auth' => 'Illuminate\Support\Facades\Auth',
'Blade' => 'Illuminate\Support\Facades\Blade',
......,
'Carbon' => 'Carbon\Carbon',
......,
)
位于 /app/database/seeds/AdminTableSeeder.php
文件代码:
class ArticleTableSeeder extends Seeder {
public function run()
{
DB::table('article')->delete();
Article::create(
array(
'title' => 'Test',
'content' => 'Test Content',
'slug' => 'test',
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
));
}
}
位于 /app/database/seeds/AdminTableSeeder.php
文件代码:
<?php
class DatabaseSeeder extends Seeder {
public function run()
{
Eloquent::unguard();
// $this->call('UserTableSeeder');
$this->call('AdminTableSeeder');
$this->command->info('Admin table seeded!');
$this->call('ArticleTableSeeder');
$this->command->info('Article table seeded!');
}
}
好,下面我们在命令行终端运行以下命令:
php artisan db:seed
结果我们发现命令行终端报错,很好,很多时候,照本宣科地按着我们教程来,也会出现一些意外,错误提示一大串,最主要原因是: Class 'Admin' not found
。我们需要解决这个问题,那原因是啥呢?Laravel
使用 Eloquent ORM
,而我们没有创建对应的 Admin
和 Article
这2个 Eloquent
模型。
下面我们在 /app/models/
目录下,参考 Laravel
本身的 User.php
,来定义 Admin
和Article
的 Eloquent
模型。
/app/models/Admin.php
代码如下:
<?php
class Admin extends Eloquent {
protected $table = 'admin';
}
/app/models/Article.php
代码如下:
<?php
class Article extends Eloquent {
protected $table = 'article';
}
模型里面先写这么多,留待后续扩展。
好,我们再次执行php artisan db:seed
命令,发现成功了,出现以下提示即表明成功!
**************************************
* Application In Production! *
**************************************
Do you really wish to run this command? y
Seeded: AdminTableSeeder
Admin table seeded!
Seeded: ArticleTableSeeder
Article table seeded!
打开数据库对应数据表,我们发现测试数据已经添加上来了。
到此,我们已经建立好数据库,并在每张表中加入了一条测试数据,下一节,我们开始进行前台页面展示,其中会涉及到路由,控制器等操作。