0%

PHP Laravel 系列 - (13) API開發_Update_and_Delete

這篇講的是如何修改更刪除資料

1. Update

在更新資料時使用的是put method,最後一個參數是id

1
2
http://localhost:8000/products/1
//http://localhost:8000/products/id

此url對應的是update function()

1
2
3
4
public function update(Request $request, $id)
{
dd($request->all());
}

1.1. 使用POSTMAN測試

在使用Laravel時,測試PUT方法記得要選用的是x-www-form-urlencoded

image-20211017232406618

1.2. 修改update function()

網址上的id對應parameter$id,試著模擬從資料庫取得資料後進行更新,並使用collect相關方法。

寫起來有點像c#LINQ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public function update(Request $request, $id)
{
//取得所有request資料
$form = $request->all();
//取得假資料並以where方式指定id,接著取第一筆資料
$data = $this->getData()->where('id',$id)->first();
//合併二個陣列,記得要先將$form轉型為collect
$data = $data->merge(collect($form));
//print訊息
dd($data);
}

public function getData()
{
return collect([
collect([
'id' => 1,
'title' => 'A',
'content' => 'aaa',
]),
collect([
'id' => 2,
'title' => 'B',
'content' => 'bbb',
])
]);
}
1
var emp = Employee.GetAllEmp().Where(x => x.Name == "Rahul").First();  

用POSTMAN測試我們看到id = 1 這筆的確被更新成功了。

image-20211017233957238

1.3. 在API常見的作法

將更新好的資料回傳回去,再稍微改一下

1
2
3
4
5
6
7
public function update(Request $request, $id)
{
$form = $request->all();
$data = $this->getData()->where('id',$id)->first();
$data = $data->merge(collect($form));
return response($data);
}

前端就正常拿到JSON格式囉

image-20211017234653585

1.4. dd 與dump差異

使用dd的效果跟dump是一樣的,不過dd會中止之後程式碼執行

2. Delete

在刪除資料時使用的是delete method,最後一個參數是id

1
2
http://localhost:8000/products/1
//http://localhost:8000/products/id

2.1. 修改destroy function()

1
2
3
4
5
6
7
8
9
10
11
public function destroy($id)
{
//先取得假資料
$data = $this->getData();
//利用filter函式留下此id以外的資料
//closure要傳入外部參數要使用use
$data = $data->filter(function ($product) use ($id){
return $product['id'] != $id;
});
return response($data);
}

跟js的狀況有一些像,都是需要經過特別的寫法去做到這件事情

1
2
3
4
5
var arr = ["abc", "abcd", "abcde"];
var string = {"name":"abc"};
arr.filter(function(item, index, array){
return item == this.name;
},string)

2.2. 使用POSTMAN測試

經由filter function()操作後,資料被重新整理了,因此會看到會多一層"1"

image-20211018002311594

2.3. 讓資料結構變好看

改寫一下在具有collect型別的$data物件加上values() ,資料結構就變乾淨囉

1
2
3
4
5
6
7
8
public function destroy($id)
{
$data = $this->getData();
$data = $data->filter(function ($product) use ($id){
return $product['id'] != $id;
});
return response($data->values());//加上values()
}

image-20211018002538390