Laravel5 EroquentとSQLまわり

2018.4.3 (火)

事前の準備

項目
モデル app/SampleModel.php (namespace: App\SampleModel)
テーブル名 sample_models

を想定して説明します。(それともApp\Flightがいいですか?)

namespace

デフォルトの状態であれば、

use App\SampleModel;

しておきます。newでもstaticでもそのままクラスが使えます。
通常は以下ぐらいやればこと足ります。

use Illuminate\Http\Request;
use App\SampleModel;
use Illuminate\Support\Facades\DB;

newする

$sample_obj= new SampleModel;

でOKです。ほんとすごい楽です。


CRUD

いわゆるCRUDができれば問題なし。
公式ページがいちばんいいって話もある。

  • Create: インサート関連(INSERT)
  • Read: セレクト関連 (SELECT)
  • Update: 更新関連(UPDATE)
  • Delete: 削除関連(Delete)

セレクト関連 (SELECT)

全部取得

とりあえず全部取得

$sample = SampleModel::all();

foreachするといろいろ出てくる。
モデルからではなくテーブル名からでも取得できます。

$sample = DB::table('sample_models')->get();

whereで条件を指定する

delflagがたってないレコードだけ取得。

$tableName = tableName::all()->where('delflag', 0);

取得したいカラムを指定する

配列でgetメソットに引数を与えてやります。
ちなみにwhere()が先でget()が後じゃないと正常に作動しませんでした。weheがスキップされますね。
(get()とfirst()みたいなメソッドは基本いちばん後ろにもってゆくことになっているようです。)

$tableName = tableName::where('delflag',0)->get([id,name]);

10件取得(n件取得する)

最新10件取得するとかいうときはtake()を使います。

$sample = DB::table('sample_models')->take(10);

インサート関連(INSERT)

次にインサートするレコードのidを事前に取得

すみません。もう少しスマートな方法ある筈。たぶん。

$sample = SampleModel::orderBy('id', 'desc')->take(1)->get();
echo $sample[0]->id + 1;

インサート

Column名がモデル(クラス)のプロパティーになっているので、そこに代入。save()メソッドはなければインサート、値があって且つ差分があれば更新。差分がなければ何もしない、という賢い人です。タイムスタンプも自動的に更新されます。

$sample = new SampleModel;
$sample->name = "myname";
$sample->save();