Laravelの小ネタ集

カテゴリ: Programming

公開日: 2019-10-10 by kuro

Laravelを使っていて気づいたこと、嵌ったことをまとめておきます。


メールをログへ出力する(ローカル開発)

初出: 2019-05-03

メールファサードでログへ出力

ローカルで動作確認する際、実際にメールを送信せずにログへ出力する設定です。

config/mail.php.env の2箇所を変更します。

// config/mail.php
'driver' => env('MAIL_DRIVER', 'log'),
# .env
MAIL_DRIVER=log

.env を変更した後は、サーバーを再起動して再読み込みする必要があります。

docker-compose exec php php example/artisan serve --host 0.0.0.0

成功すると storage/logs/laravel.log にメールの内容が書き出されます。

コントローラーへの use も忘れずに。

use Illuminate\Support\Facades\Mail;

resources/sasssass とは

初出: 2019-05-08

Laravelのresourcesにあるsassってなんだ

LaravelのresourcesフォルダにあるSassとは Syntactically Awesome Stylesheets の略です。

SassにはSASS記法とSCSS記法の2種類があります。

記法 拡張子 特徴
SASS記法 .sass インデントベース、波括弧なし
SCSS記法 .scss CSSに近い文法、波括弧あり

どちらも同じSassに含まれるため、resources/sass フォルダでは両方の拡張子が使えます。なぜ sass フォルダに .scss ファイルがあるのかと疑問に思いましたが、これで納得できました。


ORA-01008: バインドされていない変数があります

初出: 2019-10-10

LaravelでOracleのクエリを生成する際に発生したエラーです。

ORA-01008 バインドされていない変数があります。

原因は サブクエリのバインド変数の順序がずれていたことでした。

mergeBinding($subquery) だけではバインド変数の順序がおかしくなる場合があります。join を使ったサブクエリの場合は addBindingtype を明示的に指定する必要があります。

// joinしたサブクエリのバインド変数を追加
$mainquery->addBinding($subquery->getBindings(), 'join');

QueryBuilderModel::select())ではなくファサード(DB::table())を使った join の場合は特に注意が必要です。生成されたSQLをログから取り出してSQLクライアントで直接実行してみると、問題の箇所を特定しやすくなります。