今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

達人プログラマー第2版

f:id:satoshis:20211025135519j:plain


 プログラマー必読書と言っても間違いないくらいの名著「達人プログラマー」の第2版が発売されました。

 初版が発売された2000年11月30日から20年。

 ソフトウェア開発に関する技術は発展しましたが、ソフトウェア開発における活動の原則は変わってませんね。

 せっかく買ったのに1年近く放置してましたが、ぼちぼち読み始めようと思います。



モデルの保存で Column not found エラーがでるときの対処方法

モデルを保存しようとしてエラーが発生。

  Illuminate\Database\QueryException  : SQLSTATE[42S22]: Column not found: 1054 Unknown column 'hoge' in 'field list'  

テーブルには存在しないメンバ変数を設定していると、このエラーが発生する。

モデルにメンバ変数を持たせたいけどテーブルに保存する必要がない場合は、モデルのメンバ変数宣言でfalseを設定しておくと、save()を呼んだときに、そのメンバ変数を無視してくれる。

例えば、メンバ変数 $hoge を保存しない場合は、以下のように書く。

class Hoge extends Model
{
    portected $fillable = {
        'id',
        'name',
           :
    };

    public $hoge = false;
}

設定を.envに書いたのに取得できないときの対処方法

Laravelで設定ファイルの内容を読み込みたいので、.envファイルに設定を記述した。
その内容を、config/hoge.php で読み込む。

return array(
    'hoge' => env('HOGE', 'default-value'),
);

これを読み込む。

    $hoge = config('hoge.hoge');
    var_dump($hoge);

なぜか NULL が帰される。

ぐぐってみたら、キャッシュを参照しているらしい。

Larave5で.envの値を取得する

$ rm -f bootstrap/cache/config.php

今回はこれで取得できるようになった。

これでも解消しなかったら、上記ページによれば次のコマンドを実行すればいいらしい。

$ php composer.phar install
$ php composer.phar dump-autoload
$ php artisan clear-compiled
$ php artisan optimize
$ php artisan config:cache
$ php artisan route:cache
$ php artisan view:clear

Laravel+Vagrantで複数プロジェクトを動かす

まずは新しいプロジェクトを作る。

$ composer create-project --prefer-dist laravel/laravel tamae

Homestead.yaml に追加する。

sites:
    - map: nozomi.local
      to: /home/vagrant/code/nozomi/public
    - map: kanae.local
      to: /home/vagrant/code/kanae/public
    - map: tamae.local
      to: /home/vagrant/code/tamae/public

/etc/hosts にホスト名を追加する。
IPアドレスは、Homestead.yamlで指定したもの。

127.0.0.1	localhost
192.168.10.10	nozomi.local kanae.local tamae.local
255.255.255.255	broadcasthost
::1             localhost

provisionオプションを付けてVagrantを起動する。

$ vagrant up --provision

これでいける。