2017年11月16日木曜日

Eloquentのインクリメントとタイムスタンプをデフォルトでなしに [PHP Laravel]

LaravelのEloquentは、
プライマリーキーは"id"のインクリメントで
"created_at"と"updated_at"のタイムスタンプを持っているテーブルになる。
テーブルがこの構成じゃない場合は下記2行をModel毎に追加する。

-----------------------------------------------------
//プライマリーキーはインクリメントではない
public $incrementing = false;
//created_atとupdated_atを使用しない
public $timestamps = false;
-----------------------------------------------------

Model毎に追加するんじゃなくてデフォルトでなしにしたい。

LaravelProject\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php

public $incrementing = true;
があるのでfalseに。

LaravelProject\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasTimestamps.php

public $timestamps = true;
があるのでfalseに。

これでModel毎に追加する必要なし。

2017年11月13日月曜日

Eloquentを使用してDBに一括INSERT [PHP Laravel]

LaravelのEloquentを使用して、DBに一括でINSERT。

//配列を宣言
$User_A = [];

for ($i = 1; $i <= 10; $i++) {
   
    $User_E = new User();

    $User_E->id = $i;
    $User_E->name = "テスト";

    //Modelを配列にし追加
    $User_A[] = $User_E->toArray();
}

//引数に配列を渡し、一括でINSERT
User::insert($User_A);

これで大量のINSERTをする時にちょっとは早くなりそう。

2017年11月9日木曜日

Validationで数値の範囲チェックが範囲内なのにエラー [PHP Laravel]

Validationで数値の範囲チェックが範囲内でもエラーになる・・・。

--------------------------------------------------------------------
        $validator = Validator::make($request->all(), [
            'item'=>'between:2000,3000',
        ]);
--------------------------------------------------------------------

数値チェックを入れたら正常に判定されるようになった。
--------------------------------------------------------------------
        $validator = Validator::make($request->all(), [
            'item'=>'integer|between:2000,3000',
        ]);
--------------------------------------------------------------------

2017年11月8日水曜日

SELECT結果のインスタンスでDBフィールドを入力補完 [PHP Laravel]

LaravelのIDE_Helperを使用し"DB(Model)のフィールドを入力補完"まで行ったら、
Modelクラスをnewした場合は、DBフィールドが入力補完されるけど、SELECT結果のインスタンスでは補完がされない・・・。

Phpstormでは補完されたけど、Eclipseでは補完されず・・・。

どうやらwhereの返り値が何か分からないぽい。
なので、IDE_Helperが生成したアノテーションに1行追加。

/**
  * App\Table
  *
  * @property int $Field1
  * @property string $Field2
  * @method static \Illuminate\Database\Eloquent\Builder|\App\Table whereField1($value)
  * @method static \Illuminate\Database\Eloquent\Builder|\App\Table whereField2($value)
  * @method static \Illuminate\Database\Eloquent\Builder|\App\Table where($value) //***追加行***
  * @mixin \Eloquent
  */

これでwhereの返り値が判定でき、補完されるように!

where以外が最後の場合はまたそのメソッドをアノテーションに追加しなきゃだけど・・・

もっといい方法あるのかな??

2017年11月5日日曜日

DB(Model)のフィールドを入力補完 [PHP Laravel]

LaravelのEloquentを使ってみたけどDBフィールドをエディターが入力補完してくれない。

ってことで、補完用の機能を追加してくれる"laravel-ide-helper"を導入。

◯プロジェクトフォルダに移動してコンポーサーでダウンロード
composer require barryvdh/laravel-ide-helper

◯phpにダウンロードしたファイルの読み込み宣言
LaravelProject/config/app.phpファイルの'providers'に
   
  Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,

を追加

◯インストール
composer require --dev barryvdh/laravel-ide-helper

◯補完用のファイルの生成
php artisan ide-helper:generate

→LaravelProject\_ide_helper.php
 が出来る。

◯DB補完用ファイルの生成機能を追加
composer require doctrine/dbal

◯DB補完用ファイルの生成
php artisan ide-helper:models

→LaravelProject\app の下にあるModelファイルに補完用コメントが追加される。

/**
 * App\Table
 *
 * @property int $Field1
 * @property string $Field2
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Table whereField1($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Table whereField2($value)
 * @mixin \Eloquent
 */

このコメントを認識してくれるIDE・エディターなら補完してくれる。