摘要:熟悉了路由与视图的基本操作之后,我们来让视图显示一个任务列表吧。创建迁移现在,我们就可以创建一个用来生成任务表的迁移了。
熟悉了路由与视图的基本操作之后,我们来让视图显示一个任务列表吧。主要知识点:
数据迁移
查询构造器
数据库 创建数据库首先创建一个数据库:
$ mysql -uroot -p mysql> create database laratasks;数据库配置
Laravel 的配置文件保存在 config 目录下面,例如 config/database.php 保存了数据库的配置信息:
"mysql" => [ "driver" => "mysql", "host" => env("DB_HOST", "localhost"), "database" => env("DB_DATABASE", "forge"), "username" => env("DB_USERNAME", "forge"), "password" => env("DB_PASSWORD", ""), ... ],
可以看到,有几个变量都是先通过 env 方法获取的,取不到的时候再使用自定义的默认值。因此通常在 .env 目录下面根据不同的开发人员的需求来进行配置:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laratasks DB_USERNAME=root DB_PASSWORD=执行迁移
配置完数据库之后,自然想到的是如何创建和操作表?Laravel 是通过迁移来实现对表的各项操作的。而 Laravel 默认就自带了两个迁移。我们可以通过执行迁移来判断数据库是否连上:
$ php artisan migrate
如果对该命令不熟悉,可以使用如下命令查看具体说明:
$ php artisan help migrate
如果使用的 MySQL 版本低于 5.7,可能会报错:
Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
这是因为,Laravel 5.4 采用的数据库编码为 utf8mb4,该编码可以支持 emojis 表情的保存。要解决该问题,只需要增加下面的代码:
// /app/Providers/AppServiceProvider.php use IlluminateSupportFacadesSchema; public function boot() { Schema::defaultStringLength(191); }
解决了该问题之后,我们需要手动先删除数据库中的表再重新执行迁移:
$ php artisan migrate
若迁移执行成功,数据库默认会创建三张表:
mysql> use laratasks; Database changed mysql> show tables; +---------------------+ | Tables_in_laratasks | +---------------------+ | migrations | | password_resets | | users | +---------------------+ 3 rows in set (0.00 sec)
其中 migrations 是用来记录迁移信息的,其余两张则是自带的两个迁移任务生成的表。
创建迁移现在,我们就可以创建一个用来生成任务表的迁移了。首先是创建迁移:
$ php artisan make:migration create_tasks_table --create=tasks Created Migration: 2017_04_10_175246_create_tasks_table
--create=tasks 代表了要创建数据表 tasks,这样迁移文件会预先定义好一些内容。打开迁移表,添加几个字段:
// /database/migrations/日期_create_tasks_table.php public function up() { Schema::create("tasks", function (Blueprint $table) { $table->increments("id"); $table->text("name"); $table->timestamps(); }); }
当我们执行迁移时,就会调用 up 方法,我们来执行下刚才创建的迁移:
$ php artisan migrate Migrating: 2017_04_10_175246_create_tasks_table Migrated: 2017_04_10_175246_create_tasks_table查询构造器(DB)
现在,数据库就多了 tasks 表格了,我们通过 tinker 来添加数据吧:
$ php artisan tinker Psy Shell v0.8.3 (PHP 5.6.22 — cli) by Justin Hileman
首先,使用 DB 插入几条数据:
>>>> DB::insert("insert into tasks (id, name, created_at, updated_at) values (?, ?,?,?)", [1, "作业",CarbonCarbon::now(),CarbonCarbon::now()]); >>> DB::insert("insert into tasks (id, name, created_at, updated_at) values (?, ?,?,?)", [2, "购物",CarbonCarbon::now(),CarbonCarbon::now()]); >>> DB::insert("insert into tasks (id, name, created_at, updated_at) values (?, ?,?,?)", [3, "运动",CarbonCarbon::now(),CarbonCarbon::now()]);
再练习下 DB 的其他功能:
>>> DB::table("tasks")->get(); # 获取所有表数据 >>> DB::table("tasks")->get()->toArray(); # 将获取的数据转化为数据 >>> DB::table("tasks")->first(); # 获取第一条数据 >>> DB::table("tasks")->where("name","购物")->first(); # 指定条件 >>> DB::table("tasks")->pluck("name"); # 获取姓名列表显示任务列表
接下来,我们就可以让网站显示任务列表了,例如:
Route::get("tasks", function() { return $tasks = DB::table("tasks")->latest()->get(); });
访问网站的 /tasks 路径,就可以看到返回了任务列表的 json 形式。不过我们还是用视图展现吧:
// /routes/web.php Route::get("tasks", function() { $tasks = DB::table("tasks")->latest()->get(); return view("tasks.index",compact("tasks")); });
tasks.index 其实就相当于 tasks/index,接下来创建视图:
// /resources/views/tasks/index.blade.phpDocument {{ $tasks }}
访问 /tasks,直接返回了一堆任务列表,界面显示很不友好,我们可以用 PHP 的 foreach 循环来友好的显示任务列表:
// /resources/views/tasks/index.blade.php任务列表
同样,Laravel 的 Blade 模板提供了更为简洁的语法:
// /resources/views/tasks/index.blade.php任务列表
接下来是显示具体的某个任务。首先是路由:
// /routes/web.php Route::get("tasks/{task}", function($id) { $task = DB::table("tasks")->find($id); return view("tasks/show",compact("task")); });
{task} 相当于占位符,比如用户访问 tasks/1,函数接收的 $id 就为 1。
// /resources/views/tasks/show.blade.phpDocument {{ $task->name }}
最后,我们创建超链接让任务列表可跳转到具体任务吧:
任务列表
超链接我们也可以通过 url 函数生成:
id]) }}">{{ $task->name }}
参考资料:
Laravel 5.4: Specified key was too long error - Laravel News
Laravel 数据库之:数据库请求构建器 | Laravel 5.4 中文文档
PHP: 流程控制的替代语法 - Manual
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/22708.html
摘要:同时,传入参数,即已存在的查询。因此,更为常见的做法是在控制器中处理路由请求。 这一节,我们进一步完善上一节创建的任务列表。主要知识点: Eloquent Model 控制器 路由模型绑定 Eloquent Model 新增迁移 首先,我们为数据库表 tasks 新增一个字段 completed,用来表示任务是否完成: $ php artisan make:migration ad...
摘要:为的辅助方法,用于截取字符串的前个字符,然后返回前个字符加的格式。显示某篇文章显示某篇文章的比较简单,路由注意要放在下面,假如这样那么,我们访问的时候,会被当成是的查询参数。 文章的显示功能比较简单,分为两部分: 文章列表 具体的某篇文章 显示文章列表 路由之前已经定义好: Route::get(/posts,PostsController@index); 控制器: public ...
摘要:接下来执行迁移即可通用布局通用布局首先是博客首页,定义路由控制器视图博客首页访问下网站根目录,显示博客首页,框架基本搭建完成了。首先是通用布局通用布局里面除了使用之外,还使用了,用于加载其他模板。 5. 博客的通用布局 初始化 创建控制器、模型、迁移 博客的核心是文章,可以先来实现和文章有关的功能,根据前几节的介绍可知,我们至少需要创建这几类: PostsController:控制器...
摘要:本节将实现文章评论与用户关联的功能。关系定义首先修改与表,增加字段增加全部回滚并重新执行迁移添加用户表与文章表评论表的一对多关系添加文章评论表与用户表的多对一关系同时,评论表的字段增加。同时,我们还自定义了返回的错误信息。 本节将实现文章、评论与用户关联的功能。 关系定义 首先修改 posts 与 comments 表,增加 user_id 字段 /database/migratio...
摘要:但是服务通常由服务提供者来管理的。小结通过上述的例子,基本上可以理解服务容器和服务提供者的使用。懂得了服务容器和服务提供者,理解门面也就不难了。 自动依赖注入 什么是依赖注入,用大白话将通过类型提示的方式向函数传递参数。 实例 1 首先,定义一个类: /routes/web.php class Bar {} 假如我们在其他地方要使用到 Bar 提供的功能(服务),怎么办,直接传入参数即...
阅读 2433·2021-09-22 15:41
阅读 1450·2021-08-19 10:54
阅读 1757·2019-08-23 15:11
阅读 3404·2019-08-23 10:23
阅读 1431·2019-08-22 16:28
阅读 801·2019-08-22 15:11
阅读 740·2019-08-22 14:53
阅读 712·2019-08-22 13:49