複数レコードのINSERT


namespace App¥Models;
use Illuminate¥Database¥Eloquent¥Model;

class Neko extends Model
{
	public $fillable = ['neko_name', 'neko_val']; // Laravel規定によるホワイトリスト
	
		/**
	 * 複数レコードのINSERT
	 * @param [] $data データ(エンティティの配列)
	 */
	public function insertAll($data){
		
		if(empty($data)) return;
		
		foreach($data as &$ent){
			$ent = array_intersect_key($ent, array_flip($this->fillable)); // ホワイリストに存在しないフィールドを除外する
			unset($ent['id']);
		}
		unset($ent);

		$neko = $this->insert($data);
	}
	

エンティティのINSERT

コントローラ内でinsertメソッドを使う場合


	$neko = \App\Models\Neko::insert($ent);
	
「$fillable」によるホワイトリストによるフィルタリングはなされないので注意。ホワイトリストの適用は自前で行うこと。
SQLインジェクション対策はできているようだ。エンティティの値にシングルクォートを生で入力しても不具合は起きない。
複数レコード(エンティティの配列)を引数すると、複数のレコードをまとめてINSERTすることができる。

通常、INSERTはcreateメソッドを使うようことが多いようだが、何かと制約が厳しくエラーが多い。
個人的にはinsertメソッドの方が使いやすく感じる。

レスポンス(返値)は、成功した場合、true。

トランザクション

insertメソッドはトランザクションも効く

	\DB::beginTransaction();
	$neko = \App\Models\Neko::insert($ent);
	\DB::rollback();
	

モデルクラス内でinsertメソッドを使う場合

$this->insert($data);

DB: データ更新 | UPDATE | updateOrCreate


	$neko = ¥App¥Models¥Neko::updateOrCreate(['id'=>$ent['id']] ,$ent);
	

DB: INSERTと同時に追加したレコードのidを取得する | insertGetId


	// ホワイトリストによるフィルタリング
	$ent = array_intersect_key($ent, array_flip($this->fillable));

	// INSERTおよびidを取得する
	$id = $this->insertGetId($ent);
	

補足

DB: 拡張DB保存 saveEntity | saveAll

CakePHPのsaveメソッドとsaveAllメソッドを再現する。saveは既にLaravelに予約されているようなのでsaveEntityにする。



	/**
	 * エンティティのDB保存
	 * @note エンティティのidが空ならINSERT, 空でないならUPDATEになる。
	 * @param [] $ent エンティティ
	 * @return [] エンティティ(insertされた場合、新idがセットされている)
	 */
	public function saveEntity(&$ent){
		
		if(empty($ent['id'])){
			
			// ▽ idが空であればINSERTをする。
			$ent = array_intersect_key($ent, array_flip($this->fillable)); // ホワイトリストによるフィルタリング
			$id = $this->insertGetId($ent); // INSERT
			$ent['id'] = $id;
		}else{
			
			// ▽ idが空でなければUPDATEする。
			$ent = array_intersect_key($ent, array_flip($this->fillable)); // ホワイトリストによるフィルタリング
			$this->updateOrCreate(['id'=>$ent['id']], $ent); // UPDATE
		}

		return $ent;
	}
	
	
	/**
	 * データのDB保存
	 * @param [] $data データ(エンティティの配列)
	 * @return [] データ(insertされた場合、新idがセットされている)
	 */
	public function saveAll(&$data){
		
		$data2 = [];
		foreach($data as &$ent){
			$data2[] = $this->saveEntity($ent);
			
		}
		unset($ent);
		return $data2;
	}
	
	
	/**
	 * 複数レコードのINSERT
	 * @param [] $data データ(エンティティの配列)
	 */
	public function insertAll($data){
		
		if(empty($data)) return;
		
		foreach($data as &$ent){
			$ent = array_intersect_key($ent, array_flip($this->fillable));
			unset($ent['id']);
		}
		unset($ent);

		$this->insert($data);
		
		
	}
	

DB: データ削除 | destroy | DELETE


	$neko = new \App\Models\Neko();
	$neko->destroy(163);// idを指定して削除
	$neko->destroy([159, 160, 161]); // 複数のidを指定して削除
	

日本向け設定 | タイムゾーン(timezone) | ロケール

ルートパス/config/app.php

    'timezone' => 'Asia/Tokyo',

    /*
    |--------------------------------------------------------------------------
    | Application Locale Configuration
    |--------------------------------------------------------------------------
    |
    | The application locale determines the default locale that will be used
    | by the translation service provider. You are free to set this value
    | to any of the locales which will be supported by the application.
    |
    */

    'locale' => 'ja',

    /*
    |--------------------------------------------------------------------------
    | Application Fallback Locale
    |--------------------------------------------------------------------------
    |
    | The fallback locale determines the locale to use when the current one
    | is not available. You may change the value to correspond to any of
    | the language folders that are provided through your application.
    |
    */

    'fallback_locale' => 'ja',

    /*
    |--------------------------------------------------------------------------
    | Faker Locale
    |--------------------------------------------------------------------------
    |
    | This locale will be used by the Faker PHP library when generating fake
    | data for your database seeds. For example, this will be used to get
    | localized telephone numbers, street address information and more.
    |
    */

    'faker_locale' => 'ja_JP',
	

Laravelのリダイレクト(シンプル版)

コントローラクラスのアクションメソッドに以下を記述。
	return redirect('neko/bark');
	

ログインメニュー


	<!-- ログインメニュー -->
	@if (Route::has('login'))
		<div class="top-right links">
			@auth
				<a href="{{ url('/home') }}" class="btn btn-info btn-sm">Home</a>
			@else
				<a href="{{ route('login') }}" class="btn btn-info btn-sm">ログイン</a>

				@if (Route::has('register'))
					<a href="{{ route('register') }}" class="btn btn-info btn-sm">登録</a>
				@endif
			@endauth
		</div>
	@endif
	

ログインメニューの例


ブレード(Blade)の主要なディレクティブ

主要なディレクティブには@if, @empty, @isset, @for, @foreach, @whileなどがある。


	<div>
	<?php $hoge = 'neko'; ?>
	@if($hoge=='neko')
		<span>飼い猫に人間のエサを与えていけないと犬が言った。</span>
	@else
		<span>野良犬にエサをあげてはいけないと家畜豚は言う。</span>
	@endif
	</div>
	
	<div>
	@if(@empty($none))
		<span>ニワトリがネコのエサを占拠したが、イヌのエサをネコに与えた。</span>
	@else
		<span>ブタはネコに食料を分けあたえようとしたが、無理やり食べさせることにした。</span>
	@endif
	</div>
	
表示
飼い猫に人間のエサを与えていけないと犬が言った。
ニワトリがネコのエサを占拠したが、イヌのエサをネコに与えた。
	
Qiita@nyax 【Laravel】Bladeの主要ディレクティブ一覧