夜の歌

プログラミング、音楽、本について緩く書いていきます。

【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

本屋に行って本を探したが。

今日、『仲野教授の そろそろ大阪の話をしよう』を買いに本屋さんへ。ただ、探しても見つからないので店員さんを探す。しかし、店員さんも見つからない。やっと、見つけて探してもらったけど置いてないとのこと。残念。。

ちょっと思ったけど、スマホで店内の本を探せるサービスがあったらいいな。お客さんにアプリをインストールさせるのは難しいからWebで。そのWebサービスQRコードが表示されている紙を店内に貼れば、お客さんは使ってくれるんじゃないかな。どうだろう。

いや、どうかな。

Laradockのphp.iniの修正について

Laradockのphp.iniを変更する必要があったので調査。php-fpm配下のphp7.2.iniを修正し、下記コマンドを実行したら修正内容が反映された。

// サービスの停止
docker-compose stop

// サービスをバックグランドで起動
docker-compose up -d nginx mysql phpmyadmin redis workspace


恐らくコンテナ起動時に、php.iniの再読み込みが行われているはず。その処理については、Dockerfileに書かれているのか。調べるか。

『1本5000円のレンコンがバカ売れする理由』 野口 憲一

1本5000円のレンコンがバカ売れする理由 (新潮新書)

1本5000円のレンコンがバカ売れする理由 (新潮新書)

honzのレビューを読んで購入。レンコン農家に生まれた著者が、レンコンを1本5000円で売ろうと試行錯誤する姿が書かれた一冊。試行錯誤する姿が面白い。父親に凄く反対されるが折れないし、なかなかレンコンが売れない中イベントに参加したり販路を探す。そんな中、総合食品商社の方から話を持ちかけられ、徐々に光が見えてくる。

意外だったのが、レンコン購入業者の目線で商品を作ることを否定していること。例えば、業者からレンコンを真空パックにできないかとの要望が結構あるらしい。ただ、著者はその申し出を断っている。技術的にレンコンを真空パックにするのは可能らしいが、真空パックにするにしてもコストがかかる。そのコスト分を吸収する利益が出るかといったら、疑問があるらしい。

どんな仕事でも、買う側からの要望は結構あると思う。その中で、やるやらないの判断を下すのは結構難しい。目の前の売り上げって大事だしね。

とりあえず、レンコン買いたいなぁ。

honz.jp

『人工知能はどのようにして 「名人」を超えたのか?―――最強の将棋AIポナンザの開発者が教える機械学習・深層学習・強化学習の本質』 山本 一成

コンピュータ将棋のポナンザを開発した著者が、コンピュータ将棋やAIについて、また知性について語った一冊。

機械学習や深層学習の解説が載っており、しかも分かりやすい。機械学習とは機械に学習をさせて、機械が色々なことができるようになる手法のこと。また、深層学習は機械学習の手法の一つで、ディープランニングとも呼ばれる。

深層学習は、人間の脳を真似して作られている。もっと詳しく知りたい。何か作ってみるか。

ブログを書く

毎週、書いていこうと思っているけど、先週書いておらず。まぁ、いいやw

今週の土曜日に、ほぼ日企画のラグビー観戦会に行く。

www.1101.com

ラグビーは初めてで、ルールもほとんど知らないけど楽しみ。しかし、オフサイドも理解していない。大丈夫かなw今日の最高気温が30度だったので、当日も暑いかもしれない。水分補給には気をつけよう。

そう、Laravelの開発に大分慣れてきた。ただ、Laravel意外にも調べないといけないことがあり、時間がないwまぁ、それが嫌ではない。Web系の技術の移り変わりは激しいけど、やっていこう。あと、音楽レビューサイトの作りかえもやっていきたい。

明日の最高気温は、25度を希望したい。

『PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応』を読んで①

PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応』を読んでる。

PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応

PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応

120Pまで読んだ。この本を読むまで、サービスコンテナとサービスプロバイダの用語の意味とか分からなかった。やっと、少し理解できたと思う。

また、Webアプリケーションの開発で参考にできるデザインパターンも、しっかり書かれている。MVCデザインパターンについて何となく知っていたけど、MVCを参考にしたMVC2のことにも触れられているのは良かった。すごく、参考にはなる。役割を分けて処理をコンパクトにすることで、複雑化を防ぐことにできると思う。

ちょっとずつだけど、少しずつやっていこう。

『教育激変 2020年、大学入試と学習指導要領 大改革のゆくえ』 池上彰,佐藤優

大学入試試験と、学習指導要領の制度改革について、佐藤優池上彰が対談した内容をまとめた一冊。大学入試試験は、選択式だけではなく文章を書く問題が増えるらしい。採点が難しそうだけど、その方が理解力を測れるのかな。違うか、佐藤さんが言っていたように、理解力と再現力を測るテストになるのか。文章を書く問題だけ、受けてみたくなった。

知らなかったけど、受験勉強に特化している高校とかあるのね。そういう学校は、どれくらい勉強しているのかな。どのような内容を勉強しているのかな。