– bladeの一部の値(ログインユーザ順のデータ)を自動更新させたい
## 初期
controller
-> 自分以外のユーザをログイン順に取得している。
$users = User::where('id', '!=', $user_id)->orderBy('last_login','DESC')->get();
– controllerでjson形式で返せるらしい
-> ルーティングでgetとpostに対応してajaxのメソッドに繋げます
## Route
Route::get('/hoge/new', 'HogesController@create');
Route::match(['get', 'post'], '/hoge/getuser/', 'HogesController@getUser');
## Controller
public function getUser(){
$user_id = 1;
$users = User::where('id', '!=', $user_id)->orderBy('last_login','DESC')->get(['id','name','hoge']);
$json = ["userData" => $userData];
return response()->json($json);
}
## view
-setTimeoutで5秒ごとにgetメソッドでcontrollerからデータを取得する
-while( table.rows[ 0 ] ) table.deleteRow( 0 ); でtableのrowsを全て削除し、jsonデータを入れたtd, trをappendする
<table class="table" id="userList">
</table>
// 省略
<script>
$(function(){
getData()
})
function getData(){
$.ajaxSetup({
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}
});
$.get({
url: '/hoge/getuser',
method: 'GET',
dataType: 'json',
})
.done(function(data){
var table = document.getElementById('userList');
while( table.rows[ 0 ] ) table.deleteRow( 0 );
var rows = "";
for(var i = 0; i < data.userData.length; i++){
rows += "<tr>";
rows += "<td>";
rows += "hoge";
rows += "</td>";
rows += "</tr>";
}
$("#userList").append(rows);
})
.fail(function(){
})
setTimeout("getData()", 5000);
}
</script>
これ思ってたより複雑だな。jsonで持ってくる場合、hasOneやbelongsToのデータはController側で整形しないとダメか。
ajaxのjsonデータは、getで取得するURLを叩くと、jsonを見ることが可能で、デバッグには良いが、商用環境で->get() とするとセキュリティ上問題があるので、viewで使用するカラムのみ ->get([‘columName’]) で取得するようにする。