はじめに
CodeIgniterでAPIのみを書くという案件は聞いたことがあるんですが、bladeやらUIありきのLaravelでバッチ処理を書く経験を踏んだので覚書。
なおLaravel単体ではバッチ動作はできかねます。cronに実行コマンドを記述してやる必要があります。
バッチ処理実装
Laravelはファイル登録など大体のことはArtisanで行います。
$ php artisan make:command BatchTest
こちらのコードを実行すると、/app/Console/Commands/BatchTest.php というファイルが生成されます。
class BatchTest extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'command:name';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
バッチで重要になるのはこの
$signature
$description
の2つ。php artisan list
をかけると、signatureがコマンド名称
descriptionがコマンドの説明になります。
command
command:name Command description
対象コマンドを実行する場合はsignatureを指定します。
$ php artisan command:name
引数を取得したい場合
引数を取得したい場合は、signatureの後ろに引数名を指定します。
protected $signature = 'command:name --id= {--type=}';
上記の記述の場合、--id=
が必須パラメータ{}
で囲われた --type=
は任意パラメータになります。
artisanコマンドは以下の通りになります。
$ php artisan command:name --id=999 --type=aaa
なお、実装じたいはUIが無い以外は通常のControllerと大差ないかと思います。
参考リンク
https://qiita.com/hotate_chan/items/05f67096d8080b79390d
むすび
ところで、Laravelで突如出てきたServiceとは何か。
位置付けとしては、データソース-Model-Service-Controller-View 。
Modelの使い方にもよるかと思いますが、Modelに属性のキャスト、複数代入可能な属性 のみ書き、クエリや他テーブルとjoinするクエリを走らせるメソッドなんかをServiceにまとめると幸せかと思います。
どなたかの参考になればと思います。