laravel5でcontrollerから変数の受け渡し、viewでの展開の際に迷うのでメモ
1つの変数の送信
変数を一つ受け渡す場合はcompact関数又はwithメソッドで送信。
compactの方が可読性が高いのでそちらを使うことが多い。
compact関数の場合
public function test() {
	$test_1 = "テスト";
	
	return view('test.normal',compact('test_1'));
}
withメソッドの場合
public function test() {
	$test_1 = "テスト";
	
	return view('test.normal')->with('test_1',$test_1);
}
view側では通常の変数名で展開可能
<p>
	送られてきた変数は{{$test_1}}
</p>
複数の変数の送信
複数の変数の送信も単一と同じくcompact関数またはwithメソッドで送信可能。
withメソッドの場合は配列で送信する。
・compact関数の場合
public function test() {
	$test_1 = "テスト1";
	$test_2 = "テスト2";
	
	return view('test.normal',compact('test_1','test_2'));
}
・withメソッドの場合
public function test() {
	$test_1 = "テスト1";
	$test_2 = "テスト2";
	
	return view('test.normal')->with([
       "test_1" => $test_1,
       "test_2" => $test_2,
    ]);
}
view側では通常の変数名で展開可能
<p>
	送られてきた変数1は{{$test_1}}
	送られてきた変数2は{{$test_2}}
</p>
配列の送信
配列を受け渡す場合も通常の変数と同じ。以下よく使うcompact関数で説明。
public function test() {
	$test_array = ["テスト1","テスト2", "テスト3"];
	
	return view('test.normal',compact('test_array'));
}
view側では通常の配列の展開で可能
<p>
	送られてきた配列の要素1は{{$test_array[0]}}
	送られてきた配列の要素2は{{$test_array[1]}}
	送られてきた配列の要素3は{{$test_array[2]}}
</p>
postデータの送信
postで受け取ったデータをそのまま次のviewに送信する場合。
まずフォーム画面
<form action="form_post" method="post" accept-charset="utf-8">
		<!-- トークンの追加 -->
		{!! csrf_field() !!}
		<!-- テキストボックス -->
		<input type="text" name="textbox" value="">
		<!-- ラジオボタン -->
		<label>
			<input type="radio" name="radio-btn" value="選択1"> 選択1
		</label>
		<label>
			<input type="radio" name="radio-btn" value="選択2"> 選択2
		</label>
		<input type="submit" value="送信" >
</form>
postを受け取るcontroller
Requestクラスのallメソッドを使用しpostで送られたデータを取得。送信方法は通常の変数と同じ。
	public function form_post(Request $request) {
	
		//ポストデータすべての取得
		$post_data = $request::all();
		return view('test.form_post',compact('post_data'));
	}
allメソッドでは連想配列で返されるので、view側では連想配列の展開
<p class="text-center">
	テキストボックスは{{$post_data['textbox']}}
	ラジオボタンは{{$post_data['radio-btn']}}
</p>
eloquentで取得したデータベースの値の送信
使用するテーブルの構造
モデルの構造
class dbtest extends Model
{
	protected $table = 'dbtest_table';
}
controllerの記載
変数の受け渡しは通常と同じ。
public function db_test() {
	//dbtest_tableの全データを取得
	$db_data = App\dbtest::all();
	return view('test.db',compact('db_data'));
}
viewではforeachを利用し各レコードを抽出し、さらに抽出したレコードに対しアロー演算子でプロパティを指定することで各カラムのデータを取り出す。
<table>
		<tr>
			<th>ID</th>
			<th>名前</th>
			<th>年齢</th>
		</tr>
		@foreach($db_data as $recode)
			<tr>
				<th>{{$recode->id}}</th>
				<th>{{$recode->name}}</th>
				<th>{{$recode->old}}</th>
			</tr>
		@endforeach
</table>
その他foreachを使わない場合は配列の行番号+プラスアロー演算子で表示もできる。
<p>
	{{$db_data[0]->name}}
</p>
なぜ$recodeでアロー演算子でプロパティの呼び出しを行うかというと、
eloquentで取得するデータはcollectionインスタンスとして返されるためである。
collectionインスタンスを利用するとレコードの数を数えたり
$count = $db_data->count();
//$count == 3;
カラムの平均値を出したりすることが出来る
$avg = $db_data->avg('old');
//$avg == 29.333;

