Laravel 5.4入門シリーズ3.タスクリスト表示

6731 ワード

ルーティングとビューの基本的な操作に慣れたら、ビューにタスクリストを表示しましょう.主な知識点:
  • データ移行
  • クエリーコンストラクタ
  • データベース#データベース#
    データベースの作成
    まずデータベースを作成します.
    $ 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 }}
    
    

    最後に、タスク・リストを特定のタスクにジャンプできるようにハイパーリンクを作成します.


    ハイパーリンクは、url関数で生成することもできます.
    id]) }}">{{ $task->name }}

    参考資料:
  • Laravel 5.4: Specified key was too long error - Laravel News
  • Laravelデータベース之:データベース要求ビルダー|Laravel 5.4中国語ドキュメント
  • PHP:プロセス制御の代替構文-Manual