完成會員功能之後,接下來就來做 RESTful api 中的 index 與 show,
index method
此方法會取得所有使用者資料
*UsersController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
class UsersController extends Controller
{
/*
...
*/
public function index()
{
return response(['data' => User::get()]);
// or User::all();
}
}
show method
此方法必須先確認該使用者存不存在,若可以在 database 找到該筆資料就會印出來
*UsersController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
class UsersController extends Controller
{
/*
...
*/
public function show($id)
{
$user = User::find($id);
if(!is_null($user)){
return response(['data' => $user]);
}
return response()->json(['message' => 'User not found!!'], 404);
}
}
<補充> 要找到特定 id 的 user,方法可以有以下幾種:
$user = User::find($id);
$user = User::where('id', $id)->get();
$user = User::where('id', $id)->first();
不過分別用 dd($user) 印出來的結果,第2種方式會與其他兩者不太一樣
再來測試取得 $user 的某個 property 看看
dd($user->name);
// or dd($user['name']);
會發現第2種方式反而無法取到值
$user->name
會出現 Undefined property$user['name']
會出現 Undefined indexget() 取到的是整個 Collection (包含 Model 在內),而 first() 以及第1種方式取到的是在資料庫找到的第一筆記錄,若要用 get() 取某欄位的值,可以用以下解法:
$user = User::where('id', $id)->get()->toArray()[0];
之後必須以 array 的方式取值即可
dd($user['name']);
index method
show method
接下來實作 update 和 delete。
參考資料:
What is the difference between find(), findOrFail(), first(), firstOrFail(), get(), list(), toArray() : https://stackoverflow.com/questions/33027047/what-is-the-difference-between-find-findorfail-first-firstorfail-get
Collections : https://laravel.com/docs/5.8/collections