20211126のlaravelに関する記事は8件です。

MySQLエラー: MySQLに接続できない

エラー phpMyAdminを開くとmysqli_real_connect(): (HY000/2002): Connection refusedの表示がでる。 laravelでビューを開くとSQLSTATE[HY000] [2002] Connection refused (SQL: select * from 'sessions' where 'id' = y1F7Xe6g7pxGxGJo9AFhbakk2gl3RNjJCm9ToV7Z limit 1)のエラーがでる。 MySQLにアクセスしようとしたら下記エラーが表示される。 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 対処のためにしたこと mysql.server start パスワードの入力を求められたが、心当たりのあるパスワードでは開かない(忘れただけ?)。 パスワード不要で開けるようにする 「my.csf」を開く。 「skip-grant-tables」を追記して保存。 my.csf # vi /etc/my.cnf [mysqld] sql_mode=NO_ENGINE_SUBSTITUTION skip-grant-tables //これを追記 ターミナルを開き直す。もう一度以下を実行 mysql.server start 新たなエラーが表示される。PIDファイルがないとのこと。(このときはMySQLの起動自体には成功した。) ERROR! MySQL server PID file could not be found! Starting MySQL .. SUCCESS! touchコマンドでPIDファイルを作成する。はそれぞれのターミナルに表示されているものを入力してください。 touch <username><devicename>.local.pid MySQLサーバを再起動する。 mysql.server restart これで解決した。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQLエラー:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

エラー phpMyAdminを開くとmysqli_real_connect(): (HY000/2002): Connection refusedの表示がでる。 laravelでビューを開くとSQLSTATE[HY000] [2002] Connection refused (SQL: select * from 'sessions' where 'id' = y1F7Xe6g7pxGxGJo9AFhbakk2gl3RNjJCm9ToV7Z limit 1)のエラーがでる。 MySQLにアクセスしようとしたら下記エラーが表示される。 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 対処のためにしたこと mysql.server start パスワードの入力を求められたが、心当たりのあるパスワードでは開かない(忘れただけ?)。 パスワード不要で開けるようにする 「my.csf」を開く。 「skip-grant-tables」を追記して保存。 my.csf # vi /etc/my.cnf [mysqld] sql_mode=NO_ENGINE_SUBSTITUTION skip-grant-tables //これを追記 ターミナルを開き直す。もう一度以下を実行 mysql.server start 新たなエラーが表示される。PIDファイルがないとのこと。(このときはMySQLの起動自体には成功した。) ERROR! MySQL server PID file could not be found! Starting MySQL .. SUCCESS! touchコマンドでPIDファイルを作成する。はそれぞれのターミナルに表示されているものを入力してください。 touch <username><devicename>.local.pid MySQLサーバを再起動する。 mysql.server restart これで解決した。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravelのメール機能

最近laravelのメール機能を触ったので備忘録としてここに残します。 加えてメールを開発環境上で確認するのに便利なMailtrapを教えていただいたので、Mailtrapの使い方もまとめます。 開発環境 Version PHP 7.4.25 Laravel 6.18.41 mailableクラスとviewを作成する laravelが送信するメールはmailableクラスとして表される。ファイルはApp/Mailディレクトリ以下に置かれる。 php artisan make:mail TestMail Mailableクラスの設定はbuild()関数の中で設定する。 fromやsubject,replyToメソッドなどで送り主や題名、返信先などを設定する。 viewメソッドはResourcesのviewsディレクトリ以下のブレードを検索する。 view('email.test')であれば、Resources/Views/Email/Test.blade.phpを参照する。 viewでデータを使用し動的にメールを変更させたい時は、publicで変数をおき、constructで値を設定する。そうするとビュー側で設定した変数が使える。 App/Mail/TestMail.php <?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class TestMail extends Mailable { use Queueable, SerializesModels; public $variable; /** * Create a new message instance. * * @return void */ public function __construct($variable) { $this->variable = $variable; } /** * Build the message. * * @return $this */ public function build() { return $this->view('email.test') ->subject('テストメールです') ->from('test@mail.com'); } } Resorces/Views/Emails/test.blade.php <h1>テストメールです。</h1> <div>{{ $variable->hello }}</div> viewメソッドは文面をhtmlで表しますが、textメソッドはそのまま文を書いて送ることができる。 textメソッドの方が使い勝手が良い。 App/Mail/TestMail.php /** * Build the message. * * @return $this */ public function build() { return $this// ->view('email.text_test') ->text('email.text') ->subject('テストメールです') ->from('test@mail.com'); } } Resorces/Views/Emails/text_test.blade.php テストメールです。 {{ $variable->hello }} メールを送信する メッセージ送信はMailファサードを使って行う。 toメソッドで送信先のメールアドレスを設定する、ccやbccメソッドでcc,bccの設定もできる。 最後にsendメソッドで先ほど作成したmailableクラスのインスタンスを入れる。 App/Http/Controllers/SendController.php <?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use App\Mail\TestMail; use Illuminate\Http\Request; use Illuminate\Support\Facades\Mail; class SendController extends Controller { // 上記省略 public function ship(Request $request) { Mail::to($request->email) ->cc('someone@test.com') ->bcc('someone2@test.com') ->send(new TestMail()); } } mailableインスタンスの引数にデータを入れればビューで動的にデータを表示できる。 送信したメール内容を確認する 送信したメール確認にはMailTrapを利用できる。 無料で会員登録をして、Inboxes>My InboxのIntegrationsの中からlaravelを選択する。 そうすると以下の環境変数が記述されたファイルが表示されるのでこの値を.envファイルに入力する。 MAIL_MAILER=(~) MAIL_HOST=(~) MAIL_PORT=(~) MAIL_USERNAME=(~) MAIL_PASSWORD=(~) MAIL_ENCRYPTION=(~) これで設定完了、あとはメールをlaravelから送信した際MailTrapの方に飛んでいく。 ちなみに.envファイルでMAIL_FROM_ADDRESS=の値を設定すればmailableクラスでfromメソッドを使用しなくてもMAIL_FROM_ADDRESS=に書かれたアドレスを見てくれる。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel】画像保存処理実行時のエラー対処

Laravelで画像保存処理を実行中、遭遇したエラーと対処法をまとめました。 開発環境 PHP7.4 Laravel6 Bootstrap4.4 Docker20.10.8 前提 画像保存処理は実装済み テーブル作成・マイグレーション実行済み バリデーション実装済み フォーム作成済み プレビュー表示処理実装済み(JavaScript) Intervention Image インストール済み public artisan storage:link 実行済み ❗注意 コマンドをコピペして実行する際、コマンドの最後に余分なスペースが入らないよう注意しましょう。 コマンドが強制実行される場合があります。実行の際は慎重に。 目次 画像が正常に保存されない。 GD Library extension not available with this PHP installation.解決 1. 画像が正常に保存されない。 フォームをクリックして拡張子.JPEGの画像ファイルを選択。 プレビューも正常に表示 更新ボタンクリック後、プロフィール画面に遷移するはずが、バリデーションに引っかかり保存できない。 バリデーションは以下の通りです。(画像アップロード処理の部分のみ抜粋) src/app/Request/UserRequest.php public function rules() { return [ 'avatar' => ['file', 'image'], ]; } public function attributes() { return [ 'avatar' => 'プロフィール画像', ]; } Viewは以下のとおりです。(画像フォームのみ抜粋) src/resources/view/users/edit.blade.php <form method="POST" class="p-3 mb-1" action="{{ route('users.update', ["name" => Auth::user()->name] )}}" > @method('PUT') @csrf -----省略----- <div class="avatar-form image-picker text-center"> <input type="file" name="avatar" id="avatar" class="d-none @error('avatar') is-invalid @enderror" accept="images/png,image/jpeg" /> <label for="avatar" class="d-inline-block"> @if (!empty($user->avatar)) <img src="/storage/avatars/{{$user->avatar}}" class="rounded-circle" style="object-fit: cover; width: 125px; height: 125px;"> @else   <img src="/images/default.svg" class="rounded-circle" style="object-fit: cover; width: 125px; height: 125px;"> @endif  </label>  <div class="small">プロフィール画像をアップロードできます。</div>  @error('avatar')  <span class="invalid-feedback" role="alert">  <strong>{{ $message }}</strong>  </span>  @enderror </div> 色々調べてみた結果、formタグに以下一文が抜けていたせいで保存出来なかった事が判明 enctype="multipart/form-data" enctype="multipart/form-data"については以下の方の記事をご参考いただくと、理解が深まります。 以下のように修正します。 src/resources/view/users/edit.blade.php <!-- enctype="multipart/form-data"追加 --> <form method="POST" class="p-3 mb-1" action="{{ route('users.update', ["name" => Auth::user()->name] )}}" enctype="multipart/form-data"> 再度フォームをクリックして拡張子.JPEGの画像ファイルを選択。 プレビューも正常に表示 更新ボタンクリック後、プロフィール画面に遷移するはずが、今度は以下のエラーに遭遇。 GD Library extension not available with this PHP installation. 2. GD Library extension not available with this PHP installation.解決 調べてみたところ、インストール済みのIntervention Imageを使用するためには、GD Libraryがインストールされていなければならないことが判明 GD Libraryのインストール手順は、Dockerfileにコードを追加して行う方法と、 ターミナルコマンドで実行する方法があるが、私はターミナルコマンドでインストールしたので、その方法を解説します。 appコンテナに入って実行してください  以下コマンドでappコンテナに入る。(環境によってはコマンドが異なります) ターミナル $ docker compose exec app bash 以下のコマンドを上から順に実行(PHP7.4の場合) ターミナル # apt-get update # apt-get install -y zlib1g-dev libpng-dev libjpeg62-turbo-dev # docker-php-ext-configure gd --with-jpeg # docker-php-ext-install -j$(nproc) gd インストールできたらコンテナの再起動をしてください。 以下のコマンドで実行 ターミナル  $ docker restart コンテナ名 コンテナ再起動後、再び画像を保存してみる。 * 再度フォームをクリックして拡張子.JPEGの画像ファイルを選択。 * プレビューも正常に表示 * 更新ボタンクリック後、プロフィール画面に遷移し画像も正常に表示されました。 参考
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaravelのEloquentに $fillable でなく $guarded を使う

はじめに 今回はEloquentの $fillable 指定についてです。 基本的に $guarded を使う方が良いと思っているのでそれについて簡単に書いてみようと思います。 $fillable と $guarded $fillable $fillable は指定したカラムのみ、create()やfill()、update()で値が代入される、所謂ホワイトリストです。 <?php namespace App\Models; use App\Models\Model as AppModel; class User extends AppModel { protected $fillable = [ 'name', 'sex', ]; } $guarded $guarded は指定したカラムのみ、create()やfill()、update()で値が代入されない、所謂ブラックリストです。 <?php namespace App\Models; use App\Models\Model as AppModel; class User extends AppModel { protected $guarded = [ 'id', ]; } 長所と短所 $fillable 長所 指定したもの以外は入り得ない 短所 カラムが増えるたびに追加する必要がある。 特に横に長いテーブルだとツラい $guarded 長所 基本的に指定は増えない id や email、 password などだけ 短所 指定していないものは全て入り得る 上記を踏まえた上で $guarded を選んぶ理由 複数代入されることを期待しているデータは、モデルごとにあるのではなく、アクション毎 にあります。 また、↓のような クソコード が書かれている場合カラムが横に長く伸びたテーブルの場合指定漏れが起きる可能性があります。 $model->fill($request->all())->save(); ↓のような場合のコードであればギリギリ許容されますが、そもそもの $fillable に漏れがあれば意味ありません。 $model->fill($request->only('foo', 'bar'))->save(); まとめ \$model->fill(\$request->all()) と言うクソコードを止めよう fill を防ぐのは Model の役目じゃない $fillable でも問題はないが、テーブルが横長になるほどツラくなる $fillable のほうが便利でいい!な意見がありましたら是非教えてほしいです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaravelのAuth機能でログアウト後の遷移先を変更したい

はじめに LaravelのAuthを使用してログイン機能を実装。 ログアウト後の画面を"/home"ではなく"/"に変更したい。 実装内容 LoginControllerへ以下を追記しました。 loginController protected function loggedOut(\Illuminate\Http\Request $request) { return redirect("/"); } おわりに すごく簡単でした。。 Laravel本当に便利すぎます。。 もともと、loggedoutは実装されてませんでしたが、/homeへリダイレクトされるようになってるんですね どのような補完をおこなっているんでしょうか
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【バリデーション】Laravel Sailアプリケーションでバリデーション を実装する

 はじめに  私は、今年5月に現場デビューしたばかりの初心者エンジニアです。  初心者ゆえ、知識・技術ともにまだまだ未熟なこともあり、テキストを使いながら独学の勉強によって日々精進しております。  私が現在稼働させていただいている現場では、PHPフレームワークである「Laravel」を用いて実装している関係上、Laravelの勉強を進めています。  本記事では、書籍『PHPフレームワーク Laravel WEBアプリケーション開発』(竹澤有貴、栗生和明、新原雅司、 大村創太郎の4名による共同著書)を通して学んだことをアウトプットしていきます。  今回は、『バリデーションルール』についてです。  文章表現や実装方法について、齟齬や間違いなどがございましたら、ぜひご指摘くださいますようお願い致します。  ※ 書籍を購入希望の方はこちらから↓ 『PHPフレームワーク Laravel WEBアプリケーション開発』  ※ バージョンは、Laravel8.*を想定しています。  本記事の流れ  1.基本的な使用方法  2.いろいろなルールの指定方法  3.バリデーションの利用  4.失敗時の処理  5.ルールのカスタマイズ  1.基本的な使用方法  バリデーションは、利用者によって送信された値をチェックするための仕組みです。  アプリケーションに適切ではない入力値を除外するだけでなく、アプリケーションの脆弱性を狙った攻撃を防ぐこともできます。  Laravelには、バリデーションを実装できる簡単な機能が用意されています。  以下は、簡単な例です。 <?php declare(strict_types=1); namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Providers\RouteServiceProvider; use Illuminate\Support\Facades\Validator; class UserController extends Controller { public function register(Request $request) { $inputs = $request->all(); $rules = [ 'name' => 'required', 'age' => 'integer', ]; $validator = Validator::make($inputs, $rules); if ($validator->fails()) { return view('auth.login'); } return redirect(RouteServiceProvider::HOME); } } ?>  ここでは、nameとageのバリデーションチェックを行っています。  Validator::make($inputs, $rules);で、nameがあるかどうか、ageが数字型かどうかをチェックしています。  もし、チェックに引っ掛かった場合は、ログインページへリダイレクトするようになっています。 成功すれば、トップページへ遷移します。  2.いろいろなルールの指定方法  バリデーションは、キー名 => ルールの組み合わせを連想配列で指定します。 $rules = [ 'キー名' => [ バリデーションルール ], 'name' => ['required', 'max:32'], 'age' => ['required', 'integer'], 'created_at' => ['nullable', 'date'], ];  上記ではカンマ区切りですが、配列で指定する方法や|(パイプライン)で指定することもできます。 $rules = [ 'email` => ['required', 'email'], 'age' => 'required|integer', ];  バリデーションルールには、大きく分けて5つのタイプがあるようです。  1.値の存在を確認するルール  入力された値が存在するかのどうかをチェックします。先程の例でいくと、requiredが当てはまります。 $rules = [ 'name' => 'required', ];  2.型やフォーマットをチェックするルール  入力された値が、文字列型や数字型がどうかをチェックしたりします。 $rules = [ 'num' => 'integer', // 数字かどうか 'alp' => 'alpha', // 英字であるかどうか 'email' => 'email', // メールアドレスかどうか ];  3.桁数や文字数などをチェックするルール $rules = [ 'tel' => 'digits|11', // 11桁であるかどうか 'color' => 'in:green,red,yellow' // 3種類のいずれかであるか ];  次のようなパターンもあります。 $rules = [ 'number' => ['integer', 'size:10'], // 10であるかどうか 'name' => 'size:10', // 10文字であるかどうか 'button' => ['array', 'size:10'], // 要素数が10であるかどうか 'upload' => ['file', 'size:10'], // ファイルサイズが10KBであるかどうか ];  指定範囲を指すbetween、最大値を指すmax、最小値を指すminもあります。  4. 他の対象と比較するルール  新規登録を行う際、確認用としてパスワードやメールアドレスを2回入力しますよね。そのチェックにはconfirmedを使います。  これは、入力された値と、フィールド名_confirmationをフィールドに持つ値が同値であるかをチェックします。 $rules = [ 'email' => 'confirmed', //emailとemail_confirmationの値が同じかどうか ]; uniqueを使えば、重複チェックもできます。 $rules = [ 'name' => 'unique:users', // usersテーブルの同名のカラムと重複しないかどうか 'mail' => 'unique:users,email', // usersテーブルのemailカラムと重複しないかどうか 'mail' => 'unique:users,email,100', // usersテーブルのemailカラムと重複しないかどうか、また、idが100のレコードとの重複を許可する ];  5.バリデーション処理に対するルール $rules = [ 'email' => ['bail', 'required', 'unique:posts', 'email'], 'name' => ['required', 'max:255'], ]; bailを指定すると、バリデーションエラーとなった場合、それ以降のバリデーションを行わないようにすることができます。  上記の場合だと、emailでエラーが発生した場合、nameのバリデーションチェックは行われません。  3.バリデーションの利用  バリデーション機能の利用として、2つあります。  1. コントローラでのバリデーション  Laravelのコントローラでは、ルールを用意するだけでバリデーションを簡単に利用できるvalidateメソッドが用意されています。 <?php declare(strict_types=1); namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { public function register(Request $request) { $rules = [ 'name' => ['required', 'max:20'], 'email' => ['required', 'email', 'max:255'], ]; $this->validate($request, $rules); // バリデーションルール通過後の処理を実装していく $name = $request->get('name'); ~ } } ?>  この場合だと、validateメソッドでエラーが発生した場合、入力された値をセッションに保持し、直前のHTTPメソッド・URIへリダイレクト処理が行われます。  しかし、この場合だど、強制的にリダイレクトされてしまうので、専用のエラー画面などを使いたい場合は、Validatorクラスのインスタンスを生成してfailsメソッドを呼び出すこともできます。 <?php declare(strict_types=1); namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Providers\RouteServiceProvider; use Illuminate\Support\Facades\Validator; class UserController extends Controller { public function register(Request $request) { $inputs = $request->all(); $rules = [ 'name' => ['required', 'max:20'], 'email' => ['required', 'email', 'max:255'], ]; $validator = Validator::make($inputs, $rules); if ($validator->fails()) { return view('auth.login'); } return redirect(RouteServiceProvider::HOME); } } ?> $validator = Validator::make($inputs, $rules);でインスタンスを生成し、次の行の'$validator->fails()'でエラーチェックを行っています。  2.フォームリクエストによるバリデーション  フォームリクエストは、Illuminate\Http\Requestを継承するクラスで、入力値の取得に加えて、バリデーションルールや認証機能などを定義できます。  例えば、以下のようになります。 UserRegisterクラス <?php declare(strict_types=1); namespace App\Http\Controllers; use Illuminate\Foundation\Http\FormRequest; class UserRegister extends FormRequest { public function authorize() { return true; } public function rules() { return [ 'name' => ['required', 'max:20'], 'email' => ['required', 'email', 'max:255'], ]; } } ?>  UserRegisterクラスは、FormRequestを継承しています。  rulesメソッドの戻り値として、バリデーションルールを設置します。  authorizeメソッドは、フォーム処理へのアクセス権がある場合はtrueを返すようになっています。  続いて、コントローラでフォームリクエストを利用していきます。useを使って宣言しましょう。 UserController <?php declare(strict_types=1); namespace App\Http\Controllers; use Illuminate\Http\Request\UserRegister; class UserController extends Controller { public function register(UserRegister $request) { // バリデーションルール通過後の処理を実装していく $name = $request->get('name'); ~ } } ?>  UserControllerクラスのregisterメソッドが呼び出されると、UserRegisterクラスでバリデーションチェックが行われます。  エラーが発生しなければ、registerメソッドの処理が実行されます。エラーが発生した場合は、ホーム画面へリダイレクトします。  4.失敗時の処理  バリデーション によるエラー内容をユーザーに伝える必要があります。  Laravelでは、バリデーションチェックの結果は「MessageBag」オブジェクトの中に保存されているとのことです。  これは、Illuminate\Support\MessageBagクラスのインスタンスです。  ビューでは、常に'$errors'でMessageBagインスタンスが用意されています。  また、保持しているセッションの中に[errors]があれば、そちらが利用されます。  下記がコード例です。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> </head> <body> <h1>ユーザー登録フォーム</h1> <ul> @if (count($errors) > 0) @foreach ($errors ->all() as $error) <li>{{ $error }}</li> @endforeach @endif </ul> </body> </html>  バリデーションによるエラーがあれば、foreachでエラー内容を表示させます。  項目ごとに表示させる場合は、以下のようにします。 @if ($errors->has('name')) {{ $errors->first('name') }}</br > @endif  このままだと、画面上に英語が表記されてしまいます。  任意の文字列を設定したい場合は、以下のような方法があります。 <?php declare(strict_types=1); namespace App\Http\Controllers; use Illuminate\Foundation\Http\FormRequest; class UserRegister extends FormRequest { public function authorize() { return true; } public function messages() { return [ 'name.required' => '氏名は必須です', 'name.max' => '氏名は最大で20文字までです', 'email.required' => 'メールアドレスは必須です', 'email.email' => 'メールアドレスの形式が正しくありません', ]; } public function rules() { return [ 'name' => ['required', 'max:20'], 'email' => ['required', 'email', 'max:255'], ]; } } ?>  5.ルールのカスタマイズ  バリデーションルールを簡易的に追加する方法です。  Validatorクラスのextendsメソッドを利用します。 extendsメソッドは、引数にクロージャを指定し、クロージャ内でルールを定義します。 <?php declare(strict_types=1); namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Providers\RouteServiceProvider; use Illuminate\Support\Facades\Validator; class UserController extends Controller { public function register(Request $request) { $inputs = $request->all(); $rules = [ 'name' => ['required', 'max:20', 'ascii_alpha'], 'email' => ['required', 'email', 'max:255'], ]; // バリデーションルールに「ascii_alpha」を追加する Validator::extends('ascii_alpha', function($attributes, $value, $parameters) { return preg_match('/^[a-zA-Z]+$/', $value); }); // バリデーションチェックが行われる $validator = Validator::make($inputs, $rules); if ($validator->fails()) { return view('auth.login'); } return redirect(RouteServiceProvider::HOME); } } ?>  特定の条件のみ追加したい場合は、Validatorクラスのsometimesメソッドを使います。 (中略) $inputs = $request->all(); $rules = [ 'name' => ['required', 'max:20'], 'email' => ['required', 'email', 'max:255']; ]; $validator = Validator::make($inputs, $rules); $validator->sometimes( 'age', 'integer|min:18' 'function($inputs) { return $inputs->mailmagazine === 'allow'; }' );  ここでは、mailmagazineを受け取る(allow)入力があった場合、「age」フィールドに対して「値が18以上」のバリデーションルールを適用します。  まとめ  以上でバリデーションの解説は以上となります。  今回紹介したのは、あくまでも一般的な例となります。  他にも、バリデーションの適用の方法はたくさんありますので、そういった方法も含めて実装に合わせたバリデーションチェックを行わなければいけないことだけ、あらかじめご承知おきください。   最後まで読んで下さり、ありがとうございました。  参考文献 『PHPフレームワーク Laravel WEBアプリケーション開発』
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravel クエリビルダ where句にて「〇〇以外」で絞り込む方法

目的 クエリビルダのwhere句にて〇〇以外で絞り込む方法をまとめる 概要 usersテーブルにflagカラムがあったとする。 flagカラムにはintの0、intの1、intの2いずれか格納されている。 flagカラムが1以外のレコードを取得したい場合のwhere句の書き方をまとめる ご注意 「 〇〇以外」にNULLを含みたい場合は本方法では無理である。 where句ではnullを判定することができない。 orWhereNull句やグループ化などを用いて記載する必要がある。 参考 https://qiita.com/miriwo/items/59450b116213665e9b62 方法 下記の様にwhere句を記載することでflagカラムが1以外のレコードを取得することができる。 $users = DB::table('users') ->where('flag', '!=', 1) ->get(); 関連記事 https://qiita.com/miriwo/items/59450b116213665e9b62
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む