md-laravel的数据库迁移和填充学习记录
程序员文章站
2022-07-12 22:19:03
...
laravel数据库的迁移和填充
今天来学习laravel的数据库的迁移和填充,今天结合laravel的联表查询来一起学习这个技能,因为要联表查询,所以创建两个迁移文件,最经典的就是作者表个文章表,所以我们来创建create_article_table和create_author_table
1.创建迁移文件
php artisan make:migration create_article_table
php artisan make:migration create_author_table
执行后会在项目根目录下\database\migrations文件夹下就会生成
create_article_table.php
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateArticleTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('article', function (Blueprint $table) {
$table->increments('id');
$table->string('article_name')->comment('文章标题');
$table->integer('author')->comment('作者ID');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('article');
}
}
create_author_table.php
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateAuthorTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('author', function (Blueprint $table) {
$table->increments('id');
$table->string('author_name',20)->comment('作者名称');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('author');
}
}
其中
up:是创建数据库的方法
down:是删除数据表的方法
2.执行迁移文件(实际上是执行up和down的方法)
如果第一次执行迁移则需要执行如下代码
改命令执行后会自动在项目数据库中创建一张名为migrations的数据库
php artisan migrate:install
migrations的数据库的作用:用于创建记录迁移文件的记录数据表(可以看作类似于SVN的版本控制机制)。
执行迁移文件的:创建数据表(up方法,需要把系统自带的两个迁移文件删除,否则迁移操作会执行迁移文件夹中所有没有被执行的迁移文件)
php artisan migrate
上面两个是up方法的执行
Down方法执行:(回滚操作,删除数据表)
php artisan migrate:rollback
3.数据填充器(种子文件)的创建和编写
php artisan make:seeder ArticleAndAuthorTableSeeder
执行填充器
#php artisan db:seed --class=需要执行的种子文件名(不带.php)
ArticleAndAuthorTableSeeder.php
<?php
use Illuminate\Database\Seeder;
class ArticleAndAuthorTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('article')->insert([
[
'article_name' => '如何让皮肤变好?',
'author_id' => rand(1,5)
],
[
'article_name' => '雅思有必要报班吗?',
'author_id' => rand(1,5)
],
[
'article_name' => '女生们被关注腿是什么感受?',
'author_id' => rand(1,5)
],
[
'article_name' => '有真正靠炒股发家致富的例子?',
'author_id' => rand(1,5)
],
[
'article_name' => '当电影里的牛逼台词出现在现实生活中……',
'author_id' => rand(1,5)
],
]);
//作者表
DB::table('author')->insert([
[
'author_name' => '木子李'
],
[
'author_name' => '软软'
],
[
'author_name' => '杏菜不知道啊'
],
[
'author_name' => '麦龟迪'
],
[
'author_name' => '郝给力'
],
]);
}
}
写一个路由,写一个测试方法
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
class TestController extends Controller
{
public function Test(){
$data = DB::table('article as t1')
->select('t1.id','t1.article_name','t2.author_name')
->leftjoin('author as t2','t1.author_id','=','t2.id')
->get();
dd($data);
}
}
联表结果如下,已经成功关联两张表
上一篇: Scipy空间--计算凸包(convexHull)
下一篇: 继承(知识点汇总)