エンジニアのひよこ_level10

【毎日更新!】新卒3年目エンジニアブログです!

Laravel

【Laravel】getXxxAttributeに対するpluckの挙動【784日目】

pluckで、独自フィールドを使いたい public function getDisplayUsernameAttribute() { return $this->nickname ?? $this->username; } こんな感じに、display_usernameという値を使いたい。 ニックネームがなければ、ユーザーネームを出すという挙動。 これ…

【Laravel】FormRequestクラスで、複雑なバリデーションをしたい【783日目】

FormRequestクラスで、複雑なバリデーションをしたい このリクエストしか使わないので、独自バリデーションを作りたくない かといって、Controllerとかで受け取って処理するのは、別の場所に関心を増やすから嫌だってことで。 インスタンス取得時に追加 /** …

【Laravel】独自コマンドをPHP内でオプション付けて実行したい【780日目】

独自コマンドを作った 独自コマンドで以下の様にオプションを設定した。 protected $signature = 'command:xxx {--ids=*}'; これをコンソールで実行するときは php artisan command:xxx --ids=1 --ids=2 --ids=3 これを他のphp上でで呼び出したいが、どうや…

今日のイベントをDBから取得するためのクエリ【776日目】

今日行われるイベントを取得したい 今日(2019-11-28)のイベントをDBから取得したい。 じゃあSQLで whereを使って、今日と等しい値を取ればいいかというと、 時、分、秒の都合で、今日と等しい値を取るのは難しい では間を取ろう なので、今日の最初と最後の…

【Laravel】クエリビルダでcount関数を動かす【773日目】

あるデータの個数を調べたい DBのデータの個数を調べたいときはあると思います。 ある条件で絞ったときの、対象のレコード数とか。 データ取得後なら? $users = \App\Models\User::get(); $users->count(); こんなふうに、データを取って、取った値をカウン…

【Laravel】ヘルパ関数を使った時のshouldRecieveのwithの落とし穴【762日目】

ヘルパ関数を使う route('user.mypage', ['id' => 1]); これのテストコードを書きたい。 動かないコード こんな感じの書いた時、routeはURLファサードで動くので、こうなる気がする URL::shouldReceive('route') ->with('user.mypage', ['id' => 1]) ->once(…

【Laravel】サービスコンテナでbind出来ない問題の対応【735日目】

サービスコンテナでbind $this->app->bind( 'App\Services\XxxServiceInterface', 'App\Services\XxxService' ); public function __construct(XxxServiceInterface $xxx) { $this->xxx = $xxx; } これでbindしておいたのに、XxxServiceInterfaceがインスタ…

【Laravel】Hasherの拡張と、info関数の実装【725日目】

Hasher github.com LaravelにはHasherという機能があります。ハッシュ化のクラスです。 バージョンアップ 5.6から、Hasherのインターフェースにinfo関数が追加されました。 クラスの拡張するなら、これも拡張したい。ってことでどう拡張するか。 元コードの…

【PHP】改行文字を<br>に変更して表示させる【721日目】

改行を使いたい 画面に文字を表示させたい。 このとき、DBなど外部から改行の入った文字が取得出来たとする こんにちは はじめまして これをHTMLとして出力するときに、 <p></p>とするとどうなるか。 <p>こんにちは はじめまして</p> HTMLの改行は意味がないので こんにち…

【Laravel】簡単にadmin用のページを作成する【720日目】

元ネタのLaravelニュース laravel-news.com 簡単admin画面作成 composer require laravel-frontend-presets/NowUi php artisan preset nowui これで、Bootstrap4で作られた、adminテンプレートが出来上がります。 php artisan migrate --seed こちらで、基本…

【Laravel6.1】LazyCollectionにeagerメソッドが追加されます【719日目】

アプデ laravel-news.com 6.0から追加された、LazyCollectionというクラスに、新しく eager()が追加されました。 どんなことが起こる? github.com @return static` なので、LazyCollectionが返されます。 そして、eagerが呼び出された時点での中身を使用し…

【Laravel】bladeの{{}}の記号を変えることができなくなりました【717日目】

今までの変更 \Blade::setContentTags('[%%', '%%]'); \Blade::setEscapedContentTags('[-%%', '%%-]'); こうすると、 {?? ??}みたいなタグを {%% %%}に置き換えたりできました。5.3まで。 用法としては、別なテンプレートエンジンや、JavaScriptで {{}}を置…

【Laravel】カスタムバリデーションで入力が空だと動かない問題【713日目】

入力が空だとバリデーションが動かない Validator::extend('required_if_xxx_and', function($attribute, $value, $parameters) { // なんらかの処理追加する // 通常のrequired_ifをする $param_required_if = implode(",", $parameters); $result_for_requ…

【PHP】PHPとLaravelのバージョンアップで苦しんだのメモ【699日目】

これはメモです ってことで、改めて後日まとめるかもしれないです。 PHP 7.0->7.1 countの引数 count関数の引数がnullを受け付けなくなりました。 nullが来た場合、配列を入れてくださいってエラーが出ます。 Laravel 5.2->5.3 Paginator.phpのpresenterが消…

【Laravel+Vue】MPAでLaravelとVueで値を共有するには?【693日目】

DBの値をVueで扱いたい <ul v-for=items> <li></li> </ul> こんな風にfor文とかでVueを使って値を回したい。 でも、Vueからデータベースの値を取ることはできない。 ということで、Laravelなどバックエンドから値をとってきて、Vueに渡してやる必要がある。 ではどうやるのがいいか。 今の…

【Laravel6】Laravel6で追加されるLazyCollectionに思いを馳せてみる【678日目】

現状一つ悩みがありました リポジトリパターンと呼ばれる、永続化したデータを取得・操作する際に、 Repositoryクラスに集約させるようなやり方があるのですが、 Eloquentのchunkメソッドを使って取得するときに、取得中に別な作業をさせようとすると、 Repo…

【Laravel】Eloquentでsaveを書くときに注意すべきこと(特に関数内で)【677日目】

Eloquent使って、saveがしたい! function saveName(\App\Models\User $user) { $user->name = "ringo"; return $user->save(); } このコード、怖い!!! なぜか? もし、$userにすでに別な値がセットされてたら? public updateUser() { $user = User::fin…

【Laravel】DBに保存時に、空文字""をnullに変換したいとき【675日目】

DBの保存に一手間追加したい フォームの入力などで取得したデータを、ちょっと変形させてからDBに保存したい。 でも、コードの途中を変更することは困難だったり(オレオレフレームワークとか)、 該当カラムは必ず変形させたいとかがあったとします。 私だと…

【Laravel】route.phpでURLに数値だけや文字だけを対象にしたい【670日目】

routeで引数に取る型を決めたい /profile/1とか、 /profile/3とかでURLを決めたい。 でも、 /profile/aaとかは404にしたい。 呼び出し先の関数で、 abort(404)とかでもいいけど、 どうせならそもそも数値だけをrouteに設定したい。 whereで固定する Route::g…

【Laravel】マイグレーションで、カラムにコメントを追加する【662日目】

DBのカラムにコメントをつけたい カラムにコメントをつけたい。 カラム名だけだと、伝わらないってときに、MySQLのカラムにコメントを付ける事ができます。 では、それをLaravelのマイグレーションでどのように実装するか coment() Schema::create('users', …

【Laravel】Laravelで簡単会員登録機能作成【657日目】

Laravelは認証機能簡単に作れます Laravelには標準機能として、認証に関わる機能が作れます。 ですが、最初のページには当然ないので、それを作成する必要があります。 php artisan make:auth 手元に新しくLaravelで作ったサイトがあれば、以下のコマンドを…

【イベント資料】Laravel.shibuya #3のLaravel Beginner IRTまとめ【648日目】

Laravel.shibuya? laravel-shibuya.connpass.com こちらのイベントですー! 私は、Laravel Beginner IRTの司会を担当していました。 イベントまとめ資料 当日話題になったのを簡単にスライドにまとめました。 Laravel shibuya 3 Laravel Beginner IRT from O…

【Laravel】すでにDBから取得したCollectionを絞り込むwhere関数【634日目】

データを絞り込みたい // データの取得 $x_item = Xitem::get(); $this->aFunc($x_item); // $x_itemの中で条件が合致したものだけ行う処理 こんなふうに、一度データベースから取得したデータの内、一部だけを利用してデータを操作したい。 このときに、ク…

【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(机で輪っかになって討論・お…