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

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

モデルの保存で 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

これでいける。

変数に格納したタグ付き文字列をエスケープなしで表示する方法

普通に表示するとき。

<div> {{ $hoge }}</div>

エスケープなしで表示するとき。

<div> {!! $hoge !!} </div>