– 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’]) で取得するようにする。