Laravel 5.4入門シリーズ3.タスクリスト表示
ルーティングとビューの基本的な操作に慣れたら、ビューにタスクリストを表示しましょう.主な知識点:データ移行 クエリーコンストラクタ データベース#データベース#
データベースの作成
まずデータベースを作成します.
データベース構成
Laravelのプロファイルは、
いくつかの変数が
移行の実行
データベースを構成した後、テーブルの作成と操作方法について自然に考えられます.Laravelは、移行によってテーブルの各操作を実現します.Laravelのデフォルトでは、2つの移行が用意されています.移行を実行することで、データベースが接続されているかどうかを判断できます.
このコマンドに詳しくない場合は、次のコマンドを使用して詳細を表示します.
使用しているMySQLバージョンが5.7未満の場合、エラーが発生する可能性があります.
Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
これは、Laravel 5.4が採用したデータベース符号化が
この問題が解決したら、データベース内のテーブルを手動で削除してから移行を再実行する必要があります.
移行が正常に実行されると、データベースのデフォルトでは3つのテーブルが作成されます.
このうち
移行の作成
これで、タスク・テーブルを生成するための移行を作成できます.まず、移行を作成します.
移行を実行すると、
クエリーコンストラクタ(DB)
データベースには
まず、
タスク・リストの表示
次に、Webサイトにタスクリストを表示します.たとえば、次のようにします.
サイトにアクセスする
同様に、LaravelのBladeテンプレートは、より簡潔な構文を提供します.
特定のタスクを表示
次に、特定のタスクを表示します.まずルーティング:
最後に、タスク・リストを特定のタスクにジャンプできるようにハイパーリンクを作成します.
ハイパーリンクは、
参考資料: Laravel 5.4: Specified key was too long error - Laravel News Laravelデータベース之:データベース要求ビルダー|Laravel 5.4中国語ドキュメント PHP:プロセス制御の代替構文-Manual
データベースの作成
まずデータベースを作成します.
$ 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のデフォルトでは、2つの移行が用意されています.移行を実行することで、データベースが接続されているかどうかを判断できます.
$ 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 Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
この問題が解決したら、データベース内のテーブルを手動で削除してから移行を再実行する必要があります.
$ php artisan migrate
移行が正常に実行されると、データベースのデフォルトでは3つのテーブルが作成されます.
mysql> use laratasks;
Database changed
mysql> show tables;
+---------------------+
| Tables_in_laratasks |
+---------------------+
| migrations |
| password_resets |
| users |
+---------------------+
3 rows in set (0.00 sec)
このうち
migrations
は、移行情報を記録するために使用され、残りの2つは、持参した2つの移行タスクによって生成されたテーブルです.移行の作成
これで、タスク・テーブルを生成するための移行を作成できます.まず、移行を作成します.
$ 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, ' ',Carbon\Carbon::now(),Carbon\Carbon::now()]);
>>> DB::insert('insert into tasks (id, name, created_at, updated_at) values (?, ?,?,?)', [2, ' ',Carbon\Carbon::now(),Carbon\Carbon::now()]);
>>> DB::insert('insert into tasks (id, name, created_at, updated_at) values (?, ?,?,?)', [3, ' ',Carbon\Carbon::now(),Carbon\Carbon::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'); #
タスク・リストの表示
次に、Webサイトにタスクリストを表示します.たとえば、次のようにします.
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.php
Document
{{ $tasks }}
/tasks
にアクセスし、直接タスクリストを返しました.インタフェースの表示は友好的ではありません.PHPのforeach
サイクルでタスクリストを友好的に表示することができます.// /resources/views/tasks/index.blade.php
- name ?>
同様に、LaravelのBladeテンプレートは、より簡潔な構文を提供します.
// /resources/views/tasks/index.blade.php
@foreach ($tasks as $task)
- {{ $task->name }}
@endforeach
特定のタスクを表示
次に、特定のタスクを表示します.まずルーティング:
// /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.php
Document
{{ $task->name }}
最後に、タスク・リストを特定のタスクにジャンプできるようにハイパーリンクを作成します.
@foreach ($tasks as $task)
-
{{ $task->name }}
@endforeach
ハイパーリンクは、
url
関数で生成することもできます.id]) }}">{{ $task->name }}
参考資料: