エンジニアのひよこ_level10

【毎日更新!】新卒3年目エンジニアブログです! プログラムだけじゃなく、マネジメントとかも書いていきたい!

Laravel

【Laravel】whereIn('id', [])で全件検索されないのはなぜ?(コードリーディング)【608日目】

whereInの第二引数が空 function getUsersByIds(array $ids) { return User::whereIn('id', $ids)->get(); } こんな関数を書いたときに、$idsがもし []だったら? これでwhereが無いからって全件検索されたら、とんでもない障害に・・・ ですが、Laravelさん…

【Laravel】Requestクラスから、特定のフィールド値で配列を作るonly関数【605日目】

リクエストから、配列を作りたい $data = [ 'a' => $request->a, 'b' => $request->b, ]; こんな感じに、リクエストのキーと値がいい感じになってる連想配列が作りたい。 でも、 $request->all()みたいに、全部取りたいわけじゃない。 一部がほしいんだー!…

【Laravel】複数クエリビルダのプレースホルダの変数を合体させる【603日目】

クエリビルダのプレースホルダ?? こちらを参照 www.nyamucoro.com プレースホルダの変数を合体? User::select('*')->where('id', '=', 3); User::select('*')->where('name', '=', 'ringo'); このときの中身には、SQLだけでなく、プレースホルダに入れる…

【Laravel】クエリビルダのtoSql()とgetBindings()とは?【600日目】

クエリビルダのクエリを見たい User::select('*')->where('id', '>', 3); こんな感じのクエリビルダで、実際に走るSQLを見たい。 toSql() User::select('*')->where('id', '>', 3)->toSql(); これで、実際のSQLが見れる。 select * where id > ? あれ?この …

【Laravel】migration作成時に、tinyInteger等一部change出来ない罠【599日目】

プログラムの仕様変更が起こった ユーザのこの入力項目、必須のつもりだったけど、やっぱり必須じゃないように! という要件がやってきました。 DB側では、必須と想定して、nullableにしていなかったみたいです。 $table->tinyInteger('xxx') なるほど、では…

【Laravel】文字列をキャメルケースやスネークケースに変える関数【593日目】

文字をいい感じに書き換えたい 頻繁ではないですが、 'xxx_yyy'のように、View側でスネークケースのものを、バックエンドで受け取ったときとか、 スネークケースをキャメルケースに変えたいときがあったら? あるいは、DBのカラム名でスネークケースのものを…

【登壇レポ】Laravel.shibuya #1でLTしてきました!【572日目】

登壇したイベント laravel-shibuya.connpass.com 登壇資料 docs.google.com 登壇以外どうだった? 内容めっちゃ良かったですよ! こちらの方が上手くメモまとめてるので、是非参考に。 wand-ta.hatenablog.com ちなみに、先にIRT(机で輪っかになって討論・お…

【登壇資料】『LaravelのUser::find(1)で知るコードの読み方』【571日目】

明日LT登壇します! laravel-shibuya.connpass.com こちらの勉強会で5分LTしますー! 登壇資料 docs.google.com 内容 ■初心者 →call, callStatic関数を知る ■上級者 →ソースコードを『どこまで読み飛ばすか』という話題 スライド作成裏話 初心者より、目に見…

【Laravelネタ】なぜか、特定のページでcsrfトークンミスマッチがたくさん出る【521日目】

バグの解決依頼が来ました 今日の私のお仕事は、既存でバグが起こってるっぽいから、直して!ってお話! さあ、何が起こってるのかな〜? csrfトークンが一致しないよ IlluminateSessionTokenMismatchException なるほどなるほどー? これは、Laravelの機能…

【Laravel】Collectionの中にCollectionを入れたい【509日目】

Collectionの多重構造を作りたい Eloquentでgetすると、Collectionの中にモデルクラスとか、Collectionの中にCollectionとかがあったりする。 多重構造を作るときにはどうする? ちなみにこれが動かなくて詰まったお話。 new Collection($collection); newの…

【Laravel】valueRetrieverで、第一引数がcallbackでも文字列でも使える関数生成【502日目】

Laravelの関数見たら疑問を持ちました $sorted_user = $users->sortBy('sort_number'); $sorted_user2 = $users->sortBy(function ($user) { return $user->sort_number; }); dd($sorted_user == $sorted_user2); //true あれ?なんで、第一引数が、文字列だ…

【Laravel】dataProviderでヘルパ関数を使う方法【501日目】

テストコードでdataProviderを使いたい テストコードを書いているときに、dataProviderを使うことで、 テストパターンをシンプルに作りたい。 dataProviderでヘルパ関数が使えない public function XxxDataProvider() { return [ 'value' => factory(User::c…

【Laravel】app()を使った関数をテストする時にoverload使わない方が良いって話【495日目】

こんなコードがありました public function XXX() { return app('key_class')->make(); } テストコードが2種類 $mock = Mockery::mock('XxxService')->makePartial(); $this->app->instance('key_class', $mock) $mock = Mockery::mock('overload:XxxService…

【登壇レポ】新卒2年目のLaravel JP Conference初参加レポート【493日目】

Laravel JP Conferenceの記事です 前夜祭感想・参加のすすめ 登壇時のお話 他の登壇・交流のお話(ここ) Laravel JP Conferenceって? https://conference2019.laravel.jp/conference2019.laravel.jp PHPのフレームワークであるLaravelをメインテーマとした技…

【登壇レポ】新卒二年目のLaravel JP Conference登壇レポート【492日目】

Laravel JP Conferenceの登壇記事です 前夜祭感想・参加のすすめ 登壇時のお話 (ここ) 他の登壇・交流のお話 Laravel JP Conferenceって? https://conference2019.laravel.jp/conference2019.laravel.jp PHPのフレームワークであるLaravelをメインテーマと…

【登壇レポ】新卒二年目のLaravel JP Conference前夜祭レポート【491日目】

登壇してたあいつです! 皆さんこんばんは、はじめましての方はじめまして! いつも見てくださってる方、いつもありがとうございます(´;ω;`) https://conference2019.laravel.jp/ では、コントリビュート怖くないよ!って話してた新卒二年目の人です!(わ…

【Laravel】Collectionのpluckと、クエリビルダのpluckの違い【490日目】

まずお詫びです 今日コード読んでいたら、この記事で書いたこと間違っていました!!! www.nyamucoro.com どう違うかは、該当記事で説明させていただきます。 Collectionのpluckと、クエリビルダのpluck? クエリビルダでgetした後にできるCollectionに対し…

【Laravel】変数にhtmlタグを直書きしそうになった時にはviewを使おう【481日目】

コードを書いていたらタグを直書きそうになった const HTML_TAG = '<p>hogehogefugafuga</p>'; const LONG_TAG = <<<EOL <ol> <li>hoge</li> <li>fuga</li> <li>piyo</li> </ol> EOL; こんな感じの書いてた。 いやいや、それよりもいいのがあるだろと。 bladeに移そう xxx.blade.php <ol> <li>hoge</li> <li>fuga</li> <li>piyo</li> </ol> 呼び出…

【Laravel】jQueryのajaxでpostする時に、トークン書くのが面倒な方へ【480日目】

jQueryでajax使ったpost Laravelは、csrfのトークンをpost処理に入れないと、postをすることが出来ないです。 JavaScript(jQuery)使ってpostするときは、なんとかしてそのトークンを混ぜないといけない。 でも、それを毎回JavaScriptに書くのは面倒・・・ aj…

【Laravel】サービスプロバイダーのファイル名パターン【472日目】

サービスプロバイダーのファイル名迷う インターフェースの実装のためにbindとか、サービスプロバイダーでいろいろやることはあると思いますが、 全部AppServiceProviderのみにするかとか迷いますよね。 で、PHPユーザー会の方に質問したら、わかりやすい説…

【Laravel】遅延プロバイダのキャッシュ対策【467日目】

遅延プロバイダの開発してました サービスプロバイダを新しく定義する開発をしていました。 そのサービスプロバイダは、インターフェースと実装をbind結合させるだけの簡単なものだったのですが・・・ レビューしたら、動かない。コード書いた人はテストして…

【Laravel】stringやnumericのバリデーションのときにnullでエラー出る対策【465日目】

こんなときに使う Laravelのバリデーションのときに 'name' => 'string', 'age' => 'numeric' こんな感じにバリデーションをかけたとき。 これ、値が空にして送信されたら、nullが来ますね。『文字列じゃないよ!』ってエラーが出ます nullableを追加する 'n…

【Laravel】Collectionのpluckのreturn値が異なるパターン【462日目】

まずお詫びです コード読んでいたら、この記事で書いたこと間違っていました!!! 訂正記事書きました。 www.nyamucoro.com 間違い内容 EloquentのCollectionと、SupportのCollectionが異なるのは間違いないですが、 このpluckの違いは大きく差はなく、 Elo…

【Laravel】エディタでFacadeもメソッドジャンプができるようにする【449日目】

ide-helperの導入 ide-helperなるものが作られているので、それを使ってみましょう。 composerで一個追加して、コマンド一つで出来ますよ! github.com composerに追加 composer require barryvdh/laravel-ide-helper これで、ide-helperを作るためのツール…

友人がLaravelコントリビュートしました!!+個人的感想【447日目】

プルリク github.com 内容 以前書いた記事で内容を書いています。 クエリビルダのorderByで、desc ascを誤字した場合、強制的にdescになるものです。 www.nyamucoro.com ことの流れ 私がコードレビューでたまたま仕様見つける 友人達と雑談する 友人が食付き…

【Laravel】エディタやIDEでメソッドジャンプできる理由【441日目】

Laravelでメソッドジャンプなぜ出来るー メソッド名をクリックしたりすると、該当の関数をすぐ開けるとかよくありますよね。 なんで出来るんだろう?コードを追って出来るのもあるけど、 どうやらこういうファイルもあるらしい。 _ide_helper.php composer i…

【Laravel】ヘルパ関数で呼び出されているクラスがわかりやすいコード【440日目】

Laravelの元コード読んでみた github.com この該当コード、ここらへん読むと、aliasが書かれてる。 ヘルパ関数の引数とかの挙動は? github.com ここで処理してるよ。 私がLaravelコントリビュートしたのも、ここのコードの修正だよ。 ぼそっと .oO(昨日、ま…

【テスト】dataProviderで分岐で読み込む関数名をチェックする【439日目】

概要 XxxService public function func($flag) { if($flag) { return $this->user_repository->xxx(); } return $this->user_repository->yyy(); } こんなとき、xxxとyyyが読み込まれる場合をチェックしたい コード public testFunc($flag, $function_name) …

【Laravel】モデルインスタンスのフィールド値を変えたときの対応【434日目】

モデルインスタンスのフィールド値を変えた public function __construct(User $user) { $this->user = $user; } public function updateUser() { $this->user->timestamps = false; // update_atを更新させない $this->user->where('id', '=', $user_id) ->…

【Laravel】コンソールコマンドを実装時に、引数のヘルプを作成する【427日目】

Laravelのコマンドを実装するとき /** * コンソールコマンドの名前と引数、オプション * * @var string */ protected $signature = 'update:user {--user_id}'; /** * コンソールコマンドの説明 * * @var string */ protected $description = ’ユーザー情報…