iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 14
1
Software Development

從零開始的Laravel RESTful api系列 第 14

Day 14 : user ( Controller -- index & show )

完成會員功能之後,接下來就來做 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 index

get() 取到的是整個 Collection (包含 Model 在內),而 first() 以及第1種方式取到的是在資料庫找到的第一筆記錄,若要用 get() 取某欄位的值,可以用以下解法:

$user = User::where('id', $id)->get()->toArray()[0];

之後必須以 array 的方式取值即可

dd($user['name']);

Postman 實測

  • index method

    image alt

  • show method

    • 找不到使用者

    image alt

    • 存在該使用者

    image alt

接下來實作 update 和 delete。

參考資料:

  1. 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

  2. Collections : https://laravel.com/docs/5.8/collections


上一篇
Day 13 : user ( controller -- login )
下一篇
Day 15 : user ( Controller -- update & destroy )
系列文
從零開始的Laravel RESTful api30

尚未有邦友留言

立即登入留言