摘要:熟悉了路由與視圖的基本操作之后,我們來讓視圖顯示一個任務列表吧。創(chuàng)建遷移現(xiàn)在,我們就可以創(chuàng)建一個用來生成任務表的遷移了。
熟悉了路由與視圖的基本操作之后,我們來讓視圖顯示一個任務列表吧。主要知識點:
數(shù)據(jù)遷移
查詢構造器
數(shù)據(jù)庫 創(chuàng)建數(shù)據(jù)庫首先創(chuàng)建一個數(shù)據(jù)庫:
$ mysql -uroot -p mysql> create database laratasks;數(shù)據(jù)庫配置
Laravel 的配置文件保存在 config 目錄下面,例如 config/database.php 保存了數(shù)據(jù)庫的配置信息:
"mysql" => [ "driver" => "mysql", "host" => env("DB_HOST", "localhost"), "database" => env("DB_DATABASE", "forge"), "username" => env("DB_USERNAME", "forge"), "password" => env("DB_PASSWORD", ""), ... ],
可以看到,有幾個變量都是先通過 env 方法獲取的,取不到的時候再使用自定義的默認值。因此通常在 .env 目錄下面根據(jù)不同的開發(fā)人員的需求來進行配置:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laratasks DB_USERNAME=root DB_PASSWORD=執(zhí)行遷移
配置完數(shù)據(jù)庫之后,自然想到的是如何創(chuàng)建和操作表?Laravel 是通過遷移來實現(xiàn)對表的各項操作的。而 Laravel 默認就自帶了兩個遷移。我們可以通過執(zhí)行遷移來判斷數(shù)據(jù)庫是否連上:
$ 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 采用的數(shù)據(jù)庫編碼為 utf8mb4,該編碼可以支持 emojis 表情的保存。要解決該問題,只需要增加下面的代碼:
// /app/Providers/AppServiceProvider.php use IlluminateSupportFacadesSchema; public function boot() { Schema::defaultStringLength(191); }
解決了該問題之后,我們需要手動先刪除數(shù)據(jù)庫中的表再重新執(zhí)行遷移:
$ php artisan migrate
若遷移執(zhí)行成功,數(shù)據(jù)庫默認會創(chuàng)建三張表:
mysql> use laratasks; Database changed mysql> show tables; +---------------------+ | Tables_in_laratasks | +---------------------+ | migrations | | password_resets | | users | +---------------------+ 3 rows in set (0.00 sec)
其中 migrations 是用來記錄遷移信息的,其余兩張則是自帶的兩個遷移任務生成的表。
創(chuàng)建遷移現(xiàn)在,我們就可以創(chuàng)建一個用來生成任務表的遷移了。首先是創(chuàng)建遷移:
$ php artisan make:migration create_tasks_table --create=tasks Created Migration: 2017_04_10_175246_create_tasks_table
--create=tasks 代表了要創(chuàng)建數(shù)據(jù)表 tasks,這樣遷移文件會預先定義好一些內容。打開遷移表,添加幾個字段:
// /database/migrations/日期_create_tasks_table.php public function up() { Schema::create("tasks", function (Blueprint $table) { $table->increments("id"); $table->text("name"); $table->timestamps(); }); }
當我們執(zhí)行遷移時,就會調用 up 方法,我們來執(zhí)行下剛才創(chuàng)建的遷移:
$ php artisan migrate Migrating: 2017_04_10_175246_create_tasks_table Migrated: 2017_04_10_175246_create_tasks_table查詢構造器(DB)
現(xiàn)在,數(shù)據(jù)庫就多了 tasks 表格了,我們通過 tinker 來添加數(shù)據(jù)吧:
$ php artisan tinker Psy Shell v0.8.3 (PHP 5.6.22 — cli) by Justin Hileman
首先,使用 DB 插入幾條數(shù)據(jù):
>>>> DB::insert("insert into tasks (id, name, created_at, updated_at) values (?, ?,?,?)", [1, "作業(yè)",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(); # 獲取所有表數(shù)據(jù) >>> DB::table("tasks")->get()->toArray(); # 將獲取的數(shù)據(jù)轉化為數(shù)據(jù) >>> DB::table("tasks")->first(); # 獲取第一條數(shù)據(jù) >>> DB::table("tasks")->where("name","購物")->first(); # 指定條件 >>> DB::table("tasks")->pluck("name"); # 獲取姓名列表顯示任務列表
接下來,我們就可以讓網站顯示任務列表了,例如:
Route::get("tasks", function() { return $tasks = DB::table("tasks")->latest()->get(); });
訪問網站的 /tasks 路徑,就可以看到返回了任務列表的 json 形式。不過我們還是用視圖展現(xiàn)吧:
// /routes/web.php Route::get("tasks", function() { $tasks = DB::table("tasks")->latest()->get(); return view("tasks.index",compact("tasks")); });
tasks.index 其實就相當于 tasks/index,接下來創(chuàng)建視圖:
// /resources/views/tasks/index.blade.phpDocument {{ $tasks }}
訪問 /tasks,直接返回了一堆任務列表,界面顯示很不友好,我們可以用 PHP 的 foreach 循環(huán)來友好的顯示任務列表:
// /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,函數(shù)接收的 $id 就為 1。
// /resources/views/tasks/show.blade.phpDocument {{ $task->name }}
最后,我們創(chuàng)建超鏈接讓任務列表可跳轉到具體任務吧:
任務列表
超鏈接我們也可以通過 url 函數(shù)生成:
id]) }}">{{ $task->name }}
參考資料:
Laravel 5.4: Specified key was too long error - Laravel News
Laravel 數(shù)據(jù)庫之:數(shù)據(jù)庫請求構建器 | Laravel 5.4 中文文檔
PHP: 流程控制的替代語法 - Manual
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22708.html
摘要:同時,傳入?yún)?shù),即已存在的查詢。因此,更為常見的做法是在控制器中處理路由請求。 這一節(jié),我們進一步完善上一節(jié)創(chuàng)建的任務列表。主要知識點: Eloquent Model 控制器 路由模型綁定 Eloquent Model 新增遷移 首先,我們?yōu)閿?shù)據(jù)庫表 tasks 新增一個字段 completed,用來表示任務是否完成: $ php artisan make:migration ad...
摘要:為的輔助方法,用于截取字符串的前個字符,然后返回前個字符加的格式。顯示某篇文章顯示某篇文章的比較簡單,路由注意要放在下面,假如這樣那么,我們訪問的時候,會被當成是的查詢參數(shù)。 文章的顯示功能比較簡單,分為兩部分: 文章列表 具體的某篇文章 顯示文章列表 路由之前已經定義好: Route::get(/posts,PostsController@index); 控制器: public ...
摘要:接下來執(zhí)行遷移即可通用布局通用布局首先是博客首頁,定義路由控制器視圖博客首頁訪問下網站根目錄,顯示博客首頁,框架基本搭建完成了。首先是通用布局通用布局里面除了使用之外,還使用了,用于加載其他模板。 5. 博客的通用布局 初始化 創(chuàng)建控制器、模型、遷移 博客的核心是文章,可以先來實現(xiàn)和文章有關的功能,根據(jù)前幾節(jié)的介紹可知,我們至少需要創(chuàng)建這幾類: PostsController:控制器...
摘要:本節(jié)將實現(xiàn)文章評論與用戶關聯(lián)的功能。關系定義首先修改與表,增加字段增加全部回滾并重新執(zhí)行遷移添加用戶表與文章表評論表的一對多關系添加文章評論表與用戶表的多對一關系同時,評論表的字段增加。同時,我們還自定義了返回的錯誤信息。 本節(jié)將實現(xiàn)文章、評論與用戶關聯(lián)的功能。 關系定義 首先修改 posts 與 comments 表,增加 user_id 字段 /database/migratio...
摘要:但是服務通常由服務提供者來管理的。小結通過上述的例子,基本上可以理解服務容器和服務提供者的使用。懂得了服務容器和服務提供者,理解門面也就不難了。 自動依賴注入 什么是依賴注入,用大白話將通過類型提示的方式向函數(shù)傳遞參數(shù)。 實例 1 首先,定義一個類: /routes/web.php class Bar {} 假如我們在其他地方要使用到 Bar 提供的功能(服務),怎么辦,直接傳入?yún)?shù)即...
閱讀 2431·2021-09-22 15:41
閱讀 1448·2021-08-19 10:54
閱讀 1755·2019-08-23 15:11
閱讀 3402·2019-08-23 10:23
閱讀 1428·2019-08-22 16:28
閱讀 799·2019-08-22 15:11
閱讀 739·2019-08-22 14:53
閱讀 710·2019-08-22 13:49