演習課題「記事の更新機能を作る」
右の環境には、Laravelで「mydiary」というアプリケーションを作成してあります。
編集フォームで更新ボタンを押した際に、記事の更新を保存するようにしてください。
また、保存後は対象の記事の「show」ビューへリダイレクトするようにしてください。
「/diary/update/{id}」へのPOSTのルーティングはすでに作成してあり、ArticleControllerの「update」メソッドを呼び出すようになっています。
また、記事の詳細ページは「diary.detail」という名前でよびだせます。
採点して、すべてのジャッジに正解すれば、演習課題クリアです!
※ 採点時は、サーバを起動し、問題文に関するページにアクセスできる状態にしてください。
#11:編集内容を更新しよう
ここでは、編集フォームの内容を保存する機能を作ります。先ほど作成した編集フォームの内容で、データベースを更新します。
app/Http/Controllers/ShopController.php:/**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
     public function update(Request $request, $id, Shop $shop)
     {
         $shop = Shop::find($id);
         $shop->name = request('name');
         $shop->address = request('address');
         $shop->category_id = request('category_id');
         $shop->save();
         return redirect()->route('shop.detail', ['id' => $shop->id]);
     }
resources/views/show.blade.php@extends('layout')
@section('content')
    <h1>{{ $shop->name }}</h1>
    <div>
        <p>{{ $shop->category->name }}</p>
        <p>{{ $shop->address }}</p>
    </div>
    <div>
        <a href={{ route('shop.list' )}}>一覧に戻る</a>
         | <a href={{ route('shop.edit', ['id' =>  $shop->id]) }}>編集</a>
    </div>
@endsection
動画ではlaravel5.7を使用していますが、現在はより新しいLaravel5.8が公開されています。
`$ laravel new`で作成したプロジェクトはその時点で最新のLaravelがダウンロードされるため、時期によっては動画と全く同じコードでは無いかもしれませんが2019年3月現在大幅な変更はされていないので大きな影響はありません。
例えば、以下のような違いが見られる場合があります。
### artisan make:modelで作成したマイグレーションファイル
以前はidカラムがincrementsで定義されていましたが、新しくbigIncrementsで定義されるようになります。
これはデータベースのカラムの型に影響しincrements() : 符号なし4byte整数
bigIncrements() : 符号なし8byte整数
となります。
符号なし8byte整数(2\^64通り)は、符号なし4byte整数(2\^32通り)の2\^32倍 = 4,294,967,295倍もの空間を持っています。
bigIncrements()でIDを定義するとincrements()にくらべてこれだけの余裕ができ、より多くのデータを格納できるようになるというわけです。    public function up()
    {
        Schema::create('Shop', function (Blueprint $table) {
            // ここがbigIncrementsになっている
            $table->bigIncrements('id');
            $table->timestamps();
        });
    }
### AppServiceProvider.phpの関数の順番が異なる
AppServiceProvider.phpの関数が動画と違う並び順になっている場合があります。
並び順が異なるだけでメソッドそのものは変わっていませんので、目的のメソッドの位置を確認してください。
paiza cloud向けのHTTPSの設定はboot()メソッドに記述します。class AppServiceProvider extends ServiceProvider
{
    // メソッドの並び順が逆になっている
    public function register()
    {
        //
    }
    public function boot()
    {
        //
    }
}
### 404エラーのデザインが変わっている
404エラーが発生した場合(アクセス先のURLを間違えた場合など)に表示されてるエラーページのデザインがシンプルなものへ変更されました。
paizaラーニングの講座でも存在しないURLへアクセスすれば表示されますので、興味があれば確認してみましょう。
### laravelの更新情報(英語)
- [Release Notes - Laravel](https://laravel.com/docs/5.8/releases)
- [Laravel News](https://laravel-news.com/)
動画ではlaravel5.7を使用していますが、現在はより新しいLaravel5.8が公開されています。
`$ laravel new`で作成したプロジェクトはその時点で最新のLaravelがダウンロードされるため、時期によっては動画と全く同じコードでは無いかもしれませんが2019年3月現在大幅な変更はされていないので大きな影響はありません。
例えば、以下のような違いが見られる場合があります。
### artisan make:modelで作成したマイグレーションファイル
以前はidカラムがincrementsで定義されていましたが、新しくbigIncrementsで定義されるようになります。
これはデータベースのカラムの型に影響しincrements() : 符号なし4byte整数
bigIncrements() : 符号なし8byte整数
となります。
符号なし8byte整数(2\^64通り)は、符号なし4byte整数(2\^32通り)の2\^32倍 = 4,294,967,295倍もの空間を持っています。
bigIncrements()でIDを定義するとincrements()にくらべてこれだけの余裕ができ、より多くのデータを格納できるようになるというわけです。    public function up()
    {
        Schema::create('Shop', function (Blueprint $table) {
            // ここがbigIncrementsになっている
            $table->bigIncrements('id');
            $table->timestamps();
        });
    }
### AppServiceProvider.phpの関数の順番が異なる
AppServiceProvider.phpの関数が動画と違う並び順になっている場合があります。
並び順が異なるだけでメソッドそのものは変わっていませんので、目的のメソッドの位置を確認してください。
paiza cloud向けのHTTPSの設定はboot()メソッドに記述します。class AppServiceProvider extends ServiceProvider
{
    // メソッドの並び順が逆になっている
    public function register()
    {
        //
    }
    public function boot()
    {
        //
    }
}
### 404エラーのデザインが変わっている
404エラーが発生した場合(アクセス先のURLを間違えた場合など)に表示されてるエラーページのデザインがシンプルなものへ変更されました。
paizaラーニングの講座でも存在しないURLへアクセスすれば表示されますので、興味があれば確認してみましょう。
### laravelの更新情報(英語)
- [Release Notes - Laravel](https://laravel.com/docs/5.8/releases)
- [Laravel News](https://laravel-news.com/)