Learn or Die

生涯勉強。Macです。

Framework

Eloquentのsaveとupdateは処理が異なる

saveとupdateのちがい update()は更新データとの差分を見ずに更新する。 save()は更新データとの差分を見て更新するかを決める。 例)Customerテーブルのnameを更新する update()を使用した場合 update(['name' => $request->name]); save()を使用した場合 na…

MySQLへのデータ挿入時にエラーが出る

エラー SQLSTATE[HY000]: General error: 1364 Field 'カラム名' doesn't have a default value 原因 NOT NULLのフィールドにNULLをInsertすることで発生するエラー。 対処法 NULLにならないよう値を入れる エラーが出ているカラムにNULL以外をInsertする。 …

スーパーグローバル$_SERVERを参照する

PHPの場合 PHPでサーバーネームを参照する場合は以下の書き方 server; // 要素を指定して参照 request()->server->get('SERVER_NAME');

ルーティングの優先度について

事象 下記のようなルーティングで、/sample/showにアクセスすると404エラーが発生する。

クエリビルダーやEloquentを使ったupdateの戻り値

使用サンプル $this->ary_customer['customerNo'], 'del_flg' => 0 ]) ->first() ->update([ 'password' => $ary_request['newpass'], 'edit_date' => Carbon::now() ]); //->first()を付けることで 、更新成否で条件分岐ができる if($result_update){ echo…

リソースコントローラ

リソースコントローラとは リソースコントローラを使うとアプリの基本的な操作であるCRUD(作成、一覧表示、編集、削除)などのアクションや、そのルーティングが自動的に作成される。 リソースコントローラ作成方法 以下のコマンドを実行 $ php artisan make…

独自のバリデーションルールを追加する

追加方法 クロージャを使用する サイト全体の中で一度しか使用しないルールはこちらで記述すると○。 validate([ 'name' => 'required|string', 'kana' => [ 'required', 'string', function ($attribute, $value, $fail) { if (preg_match('/[^ぁ-んー]/u', …

エラーメッセージのカスタマイズ方法

カスタマイズ方法 ビュー側▼ @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif エラーメッセージをカスタマイズする。 validateメソッドに表示したいメッセージの配列を追加する。 validate([ 'newp…

GETパラメータの受け取り

パラメータ付きのURLからパラメーターの値を取得し、ビューで表示する パラメーター付きURL▼ http://localhost/sample_request?value=aaa Routing▼

パラメータのフォーマットを制約する

正規表現制約 ルートインスタンスのwhereメソッドを使用し、引数に正規表現を指定する。 例)1-12の数字であるパラメータを許可するルート name('mypageHoroscopeDetail')->where('zodiac_id', '[1-12]+'); 複数指定の場合▼

クッキーとセッションの確認と破棄

セッションの確認と破棄 方法①Requestインスタンスを経由する▼ session()->get('customer'); // 指定したデータをセッションから削除する $request->session()->forget($value); 方法②グローバルなヘルパ関数session( )を使用する▼ Illuminate\Session\Sessi…

Laravelで前回の入力値を表示する

old関数 <input type="email" name="email" placeholder="" value="{{ old('email') }}"> oldの引数に、対象のname属性を指定することで、前回の入力値を表示してくれる。 入力エラーの場合など、前の入力値を保持する必要があるときに便利。 編集時など、すでに保存されている値がある場合は、以下のように第二引数にデフォルトの値を設…

DBの値でバリデーションチェックする

exists:テーブル名,カラム名 フィールドの値が、指定されたデータベーステーブルに存在することをバリデートする。 基本的な使用方法 'exists:customer,id' columnオプションを指定しない場合、フィールド名が利用される。 'exists:customer' テーブル名を…

バリデーションalpha_numを指定しても全角文字が通ってしまう問題

問題点 半角英数字以外はエラーにしたいので、バリデーションに「alpha_num」を追加したが、ひらがな等が通ってしまう。 validate([ 'newpass' => 'required | min:8 | alpha_num | confirmed ' ] 解決策:正規表現を使う regexで正規表現を指定することで「…

「パスワードの確認」をバリデーションチェックする方法

使用機会 新規登録時やパスワード変更時に、「パスワード」「パスワード(確認)」でパスワードを入力したとき。 同じパスワードかどうかをチェックする方法 フォームのパスワード(確認用)のname属性を「xxx_confirmation」にする 確認用ではないパスワード…

insertにはcreateメソッドを使う

createメソッド モデルクラスからcreateメソッドを呼ぶことで、「インスタンス作成→属性の代入→データの保存」を一気通貫でやってくれる。 さらに作成したインスタンスを返してくれるのも便利。 createメソッドの使い方 guardedもしくはfillableを指定する

「self::」と「$this」の違い

$this $thisは⾃分⾃⾝のオブジェクトを指す。 クラス内のメンバ変数やメソッドにアクセスする際に使う。 title; } } self:: self::は⾃クラスを指す。 クラス定数、static変数については、インスタンス化せずに使⽤する。 そのため$thisは使⽤せず、代わり…

Laravel のroute には名前をつけたほうがよい理由

->name() Laravelにはルートに名前を付ける機能がある。 route/web.php▼ name('mypageTop'); view側▼

$_SERVERとは

$_SERVERとは $_SERVER は、ヘッダ、パス、スクリプトの位置のような 情報を有する配列。 この配列のエントリは、Web サーバーにより生成される。全ての Web サーバーがこれら全てを提供する保障はない。 $_SERVER['REMOTE_ADDR'] 現在ページをみているユー…

Laravelのリダイレクト方法とfilemtime関数

Laravelのリダイレクト方法 一番簡単なのは、グローバルなredirectヘルパを使用する方法。 route('mypageTop'); パラメータが必要な場合は、routeメソッドの第2引数として渡す。 route('mypageTop', ['id' => 1]); filemtime関数 ファイルの更新時刻を取得…

config関数

config()で設定情報を取得する 指定するキーの先頭はconfigファイル名でその後はドットつなぎで配列の下層を指定することができる。 '新しいサイト名']); 参考サイト readouble.com

asset宣言内の変数

NG これだとエラーになる。 <img class="fortune-img pb-20" src={{ asset('./img/horoscope/seiza-title- {{ $constellation_id }} .png') }} alt=""> OK Bladeタグをネストすることはできない。 パターン2のほうが簡潔で◯。 パターン1 <img class="fortune-img pb-20" src={{ asset('./img/horoscope/seiza-title-' .$constellation_id. '.png') }} alt=""> パターン2

算出プロパティとメソッドのちがい

1. 算出プロパティは引数を持てない 算出プロパティは「()」を伴う呼び出しができないので、引数をもてない。 引数を伴う呼び出しにはメソッドを利用する必要がある。 2. 算出プロパティは取得用途 算出プロパティの用途は、基本的に既存データの加工を伴…

v-bind - 属性値にJavaScriptを埋め込む

構文 <a v-bind:href="url">詳細はこちら</a> 省略構文 v-bindはよく利用する、という理由から省略構文も用意されている。 <a :href="url">詳細はこちら</a>

トレイト

トレイトとは

コレクション

sortByDesc('created_at'); allメソッドはモデルが持つクラスメソッドで、モデルの全データをコレクションで返します。 さらにコレクションのメソッドである、sortByDescメソッドを使ってcreated_atの降順で並び替えをしています。 コレクション コレクショ…

モデルの作成とリレーションの追加

モデルの作成 モデル名は大文字から始まる単数形にするのが一般的。 $ docker-compose exec workspace php artisan make:model Sample コマンドが成功すると、laravel/appディレクトリにSample.phpが作成される。 Sample.phpには何もメソッドが書かれていな…

{{ }}によるデータ表示

Bladeに渡された変数は、{{ }}で囲うことで、その値を表示できる。 また、{{ }}の中ではPHPの処理を書くこともできる。 Controller▼ 'Hanako']); View▼ <div class="name"> {{ $name }} </div> Bladeの{{ }}記法はXSS攻撃を防ぐため、自動的にPHPのhtmlspecialchars関数が通される。…

Bladeの記法 - @extendsと@section

@extends('app') @section('title', 'サンプル') @section('content') <div class="container"> <div class="card mt-3"> <i class="fas fa-user-circle fa-3x mr-1"></i> <div class="font-weight-bold"> Sample </div> </div> </div> @endsection @extendsと@section @extends @extends('app')で、app.blade.phpをベースとして使っている。 @s…

テンプレートを構成する仕組み

{{....}}(Mustache構文) {{....}}は、与えられた式の値をテンプレートに埋め込む(=バインドする)基本的な手法。 テキスト部分に値を反映させるだけの簡単な記法。 Vue側▼ let app = new Vue({ el: '#app', data: { message: 'Hello World!' } }); HTML側▼ <div id="app"></div>…