【Laravel】updateメソッドで保存する時にハマった
データの更新をする際に、updateメソッドを使って実行。そして、ハマった。そのコードは、下記。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Model\Book; class BookController extends Controller { public function index(Request $request) { $book = Book::where('page', 100)->get(['page'])->first(); $book->page = 5; $book->update(); } }
ログに実行したsqlを出力しているので、確認してみる。
[2019-08-31 15:52:22] local.INFO: Query Time:11.06s] select `page` from `book` where `page` = ? [2019-08-31 15:52:22] local.INFO: Query Time:1.53s] update `book` set `page` = ?, `updated_at` = ? where `id` is null
2行目でupdate文のsql。コード上では、「wehre is null」は使っていない。恐らく、updateメソッド内で実装しているのかな。
それで、下記のようにgetの指定カラムにidを追加したら想定通りの動作になった。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Model\Book; class BookController extends Controller { public function index(Request $request) { $book = Book::where('page', 100)->get(['id', 'page'])->first(); $book->page = 5; $book->update(); } }
ログも確認
[2019-08-31 16:07:58] local.INFO: Query Time:17.51s] select `page`, `id` from `book` where `page` = ? [2019-08-31 16:07:58] local.INFO: Query Time:4.01s] update `book` set `page` = ?, `updated_at` = ? where `id` = ?
where句でidを使って絞り込みをかけるようになっていた。なるほど、面白い。updateメソッドの処理の確認をしてみよう。
Laravelで処理途中でDBの変更をしたい
Laravelで処理途中でDBの変更をしたい。どうすればいいのか。答えは、config/database.phpのconnections.mysql.databaseの値を変更する。下記、コードで変更できる。
\Config::set('database.connections.mysql.database', 'test_db');
ただ、一度DBに対してアクセス後に上記コードを実行しても、connections.mysql.databaseの値自体を変更できるが、アクセス先のDBは変更はできない。うーむ、何故。
恐らく、1度DBにアクセスした後にアクセス先のDBをキャッシュしているのかな。調査する。
【Laravel】任意のルートパラメーターの挙動について
任意のルートパラメーターが設定されている時、されていない時の挙動を確認した。サンプルコードを含め確認した内容を記す。
まずは、wbe.php
// web.php <?php Route::get('okinawa/{urasoe?}', 'OkinawaController@index');
続いて、サンプルで作ったOkinawaController。ルーティングに設定した任意のルートパラメーターurasoeを取得する処理が実装されている。
// OkinawaController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class OkinawaController extends Controller { public function index(Request $request) { var_dump($request->urasoe); exit(); } }
任意のルートパラメーターが設定されているパターン
・実行URL
http://localhost/okinawa/urasoe
・結果
string(6) "urasoe"
任意のルートパラメーターが設定されていないパターン
・実行URL
http://localhost/okinawa
・結果
NULL
任意のルートパラメーターの値は$requestオブジェクトのプロパティから取得できる。任意のルートパラメーターが設定されている場合、string型の値が取得できた。また、ルートパラメーターが設定されていない場合にはNULLを取得。
ふと思ったけど、string型の数値をrequestオブジェクトのプロパティから取得した場合には、どのような型になるのか。ちょっと、気になる。
※参考
readouble.com
『1本5000円のレンコンがバカ売れする理由』 野口 憲一
- 作者: 野口憲一
- 出版社/メーカー: 新潮社
- 発売日: 2019/04/16
- メディア: 新書
- この商品を含むブログを見る
honzのレビューを読んで購入。レンコン農家に生まれた著者が、レンコンを1本5000円で売ろうと試行錯誤する姿が書かれた一冊。試行錯誤する姿が面白い。父親に凄く反対されるが折れないし、なかなかレンコンが売れない中イベントに参加したり販路を探す。そんな中、総合食品商社の方から話を持ちかけられ、徐々に光が見えてくる。
意外だったのが、レンコン購入業者の目線で商品を作ることを否定していること。例えば、業者からレンコンを真空パックにできないかとの要望が結構あるらしい。ただ、著者はその申し出を断っている。技術的にレンコンを真空パックにするのは可能らしいが、真空パックにするにしてもコストがかかる。そのコスト分を吸収する利益が出るかといったら、疑問があるらしい。
どんな仕事でも、買う側からの要望は結構あると思う。その中で、やるやらないの判断を下すのは結構難しい。目の前の売り上げって大事だしね。
とりあえず、レンコン買いたいなぁ。
『人工知能はどのようにして 「名人」を超えたのか?―――最強の将棋AIポナンザの開発者が教える機械学習・深層学習・強化学習の本質』 山本 一成
人工知能はどのようにして 「名人」を超えたのか?―――最強の将棋AIポナンザの開発者が教える機械学習・深層学習・強化学習の本質
- 作者: 山本一成
- 出版社/メーカー: ダイヤモンド社
- 発売日: 2017/05/11
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (9件) を見る
コンピュータ将棋のポナンザを開発した著者が、コンピュータ将棋やAIについて、また知性について語った一冊。
機械学習や深層学習の解説が載っており、しかも分かりやすい。機械学習とは機械に学習をさせて、機械が色々なことができるようになる手法のこと。また、深層学習は機械学習の手法の一つで、ディープランニングとも呼ばれる。
深層学習は、人間の脳を真似して作られている。もっと詳しく知りたい。何か作ってみるか。
ブログを書く
『PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応』を読んで①
『PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応』を読んでる。
PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応
- 作者: 竹澤有貴,栗生和明,新原雅司,大村創太郎,丸山弘詩
- 出版社/メーカー: ソシム
- 発売日: 2018/09/26
- メディア: 単行本
- この商品を含むブログを見る
また、Webアプリケーションの開発で参考にできるデザインパターンも、しっかり書かれている。MVCのデザインパターンについて何となく知っていたけど、MVCを参考にしたMVC2のことにも触れられているのは良かった。すごく、参考にはなる。役割を分けて処理をコンパクトにすることで、複雑化を防ぐことにできると思う。
ちょっとずつだけど、少しずつやっていこう。
『教育激変 2020年、大学入試と学習指導要領 大改革のゆくえ』 池上彰,佐藤優
教育激変-2020年、大学入試と学習指導要領大改革のゆくえ (中公新書ラクレ)
- 作者: 池上彰,佐藤優
- 出版社/メーカー: 中央公論新社
- 発売日: 2019/04/06
- メディア: 新書
- この商品を含むブログを見る
大学入試試験と、学習指導要領の制度改革について、佐藤優と池上彰が対談した内容をまとめた一冊。大学入試試験は、選択式だけではなく文章を書く問題が増えるらしい。採点が難しそうだけど、その方が理解力を測れるのかな。違うか、佐藤さんが言っていたように、理解力と再現力を測るテストになるのか。文章を書く問題だけ、受けてみたくなった。
知らなかったけど、受験勉強に特化している高校とかあるのね。そういう学校は、どれくらい勉強しているのかな。どのような内容を勉強しているのかな。