系列之二关联上了MVC(Model-View-Controller)架构各个分支,已经初步了解MVC的一般流程是这样的:View(界面)触发事件→Controller(业务)处理了业务,然后触发了数据更新→不知道谁更新了Model的数据→Model(带着数据)回到了View→View更新数据。今天就重点来扯一下Model数据模型这个重量级的话题……
PHP的威力在于动态网页设计,所谓动态网页设计就是前台静态页面(.htm)关联后台动态页面(.php)的机制,核心是后台有数据库通过数据模型在响应用户业务逻辑。说到这里,数据库该闪亮登场了……
细心的童鞋会发现“一键安装”好的laravel 跟正常使用的项目相比差个 .env 环境配置文件。我们需要复制项目根目录下的 .env.example 示例文件并重命名为 .env,这个是项目的示例配置文件,需要把模板内容改成自己的实际配置,也就是每个PHP项目正式开发的第一步:配置环境参数。PHP原生开发时,我们一般给童鞋准备个逻辑清晰的install.php安装程序,方便童鞋们按提示配置环境参数,但laravel的官方玩法不是这样,需要手工修改环境参数示例文件.env说起来也很简单,只需修改下面的数据库连接环境变量就行了。
APP_NAME 就是自己的项目名称比如:test
APP_URL 就是我们的项目链接比如说我的 http://test.com
本地的话就是我们配置的虚拟主机自定义的本地域名。
DB_DATABASE 就是我们的数据库名比如说: test
DB_USERNAME 数据库用户名比如说: root
DB_PASSWORD 数据库密码比如说:root
改完了 .env 环境参数文件,还有项目配置项中的一些东西需要改,
laravel 5.4 以后默认使用 utf8 字符集,utf8 主要是用来支持 emoji 表情的,如果你的本地环境中的 mysql 低于5.7.7,为了防止在以后使用的过程中报错,需要找到 config/database.php 文件中的 mysql 修改 charset、collation为utf8在config/database.php 文件中的 connections 的 prefix 可以设置每种数据库的表前缀,迁移的时候不需要为每张表指定表前缀。如果使用 5.7 以上的 mysql 数据库,还可以把 strict 改为 false 关闭严格模式,以防止报类似如下 only_full_group_by 的错误。
除了数据库还有两个关键之处“时区/语言”需要改的,打开 config/app.php 文件,把 timezone 改为 PRC,laravel 默认的时区是 UTC ,中国的时区是 PRC ,如果没有改的话,那数据库存自动生成的时间会和我们的实际相差8个小时。然后把 locale 改为 zh-CN,把语言改为中文。
mysql数据库参数修改好后,接着我们需要执行
php artisan key:generate
这个是生成 APP_KEY 并自动写入到 .env 文件中的,它是 laravel 用来加密 cookie 等的。这个很关健,每次安装laravel项目时都必须记着重新生成加密的盐。
新创建的项目无迁移文件,开始创建项目主表迁移文件,例如:
php artisan make:migration create_articles_table
articles 就是我们要创建的表名(在这里是项目主表“文章”),laravel 默认表都是复数形式。
我们运行上面的命令后,会在 database/migrations 目录生成一些迁移文件,例如:
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table
Migrating: 2018_04_17_111213_create_articles_table
Migrated: 2018_04_17_111213_create_articles_table
重点是关注一下刚创建好的迁移文件create_articles_table.php模型,laravel再优雅、再省力,也不可能自动按开发者的意思自动生成业务逻辑代码,laravel只会帮我们生成通用表操作模板,针对性细节代码要结合项目需求修改一下,例如:
文章一般是有所属的分类的,我们用 int 类型的 category_id 表示分类的id;并且用 unsigned 表示无符号,用 default 设置默认值为0,用 comment 写注释。就必须加上一行代码:
$table->integer('category_id')->unsigned()->default(0)->comment('分类id');
再加分别用string、text 类型增加文章标题、内容字段:
$table->string('title')->comment('标题');
$table->text('content')->comment('文章内容');
$table->timestamps(); 的作用是给表增加 created_at 和 updated_at,laravel 插入和编辑数据的时候会自动通过这两个字段记录操作的日期时间。
$table->softDeletes(); 这个方法就是为表增加一个 deleted_at ,laravel 会在删除数据的时候记录操作日期,具体到我们的文章的时候就是回收站的功能了,我们可能会删除文章,但是我们还希望能恢复删除的文章,当某篇文章的 deleted_at 为 null 的时候表示正常,当有日期的时候就表示这篇文章是在这个日期被删掉了。
这样,我们就设计了一个简易的文章表了,以后根据需要再扩展功能,进一步修改这个模型或模块(.php)
再接着我们需要执行迁移才会真正生成表,执行迁移命令:
php artisan migrate
如果出现提示:Migration table created successfully.说明已经按迁移文件生成相应表。这时候我们查看数据库会发现创建了一大堆表(与迁移文件创建的表名相同)。
如果报错的话,大多是因为 .env 中的数据库账号密码配置的有问题,使用客户端或者其他项目连下数据库检查下。
数据库表有了,但是表都是空的。这时候我们需要向数据库批量添加数据的。简单来个公式:迁移 + 填充 = sql这样就容易理解迁移和填充的作用了。
首先同样是用命令行创建填充文件:
php artisan make:seeder ArticlesTableSeeder;
这会创建一个 database/seeds/ArticlesTableSeeder.php 填充文件。里面有个 run 方法,必须利用 DB 的方法写上要填充的内容,例如:
/**
* Run the database seeds.
*
* @return void
*/public function run()
{
DB::table('articles')->insert(
[
[
'category_id' => 4,
'title' => '文章4',
'content' => '内容4'
],
[
'category_id' => 5,
'title' => '文章5',
'content' => '内容5'
]
]
);
}
和迁移样先创建好填充文件写好填充内容,接着就是要运行填充了。
执行填充命令:
php artisan db:seed;
我们会发现 database/seeds 目录下还有个 DatabaseSeeder.php 文件;是默认就存在的,并不是我们创建的。里面也有一个 run 方法,我们可以看到里面注释了一个示例:
// $this->call(UsersTableSeeder::class);
根据这个例子了,就必须按示例修改为
$this->call(ArticlesTableSeeder::class);
说明这个默认的文件并像我们自己创建的填充文件一样写填充的内容的,它是用来定义填充文件的执行顺序的;php artisan db:seed
这个是用来生成测试数据或者其他的一些基础数据的,一般到这就没啥错误了,到这里就可以愉快的访问项目了,浏览器访问 APP_URL 链接,一般项目首页起码是不会空的。如果首页并不能访问,我们可以查看 routes/web.php 文件里面定义的路由,如果需要登录,一般可以通过查看填充文件 database/seeds/UsersTableSeeder.php 来查看初始账号密码是否正确。
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.hezhubi.com/laravel.htm
共有 0 条评论