# [laravel]laravel basic CRUD
###### tags: `laravel`,`laravel5.8`
## READ
```php
//method1
$todos= Todo::get();
//method2
$todos = Todo::OrderBy('created_at', 'desc')->get();
//method1
$todo = Todo::find($id);
//method2
$todo = Todo::where('id',$id)->first();
```
## CREATE
```php
$todo = Todo::create($request->all());
$todo = $todo->refresh();
```
## EDIT
```php
<form class="form-horizontal" action="{{route('user.update', $user)}}" method="POST">
@csrf
@method('PATCH')
<div class="card-body">
<div class="form-group row">
<label for="name" class="col-sm-2 col-form-label">用戶名稱</label>
<div class="col-sm-10">
<input type="text" class="form-control @error('name') is-invalid @enderror" name="name" id="name" value="{{ $user->name }}">
@error('name')
<div class="text-danger text-left">{{ $message }}</div>
@enderror
</div>
</div>
<h5 class="mt-4">修改密碼(若不需修改請空白)</h5>
<hr>
<div class="form-group row">
<label for="password" class="col-sm-2 col-form-label">新密碼</label>
<div class="col-sm-10">
<input type="password" class="form-control @error('password') is-invalid @enderror" name="password" id="password">
@error('password')
<div class="text-danger text-left">{{ $message }}</div>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password_confirmation" class="col-sm-2 col-form-label">確認新密碼</label>
<div class="col-sm-10">
<input type="password" class="form-control @error('password') is-invalid @enderror" name="password_confirmation" id="password_confirmation">
</div>
</div>
</div>
<!-- /.card-body -->
<div class="card-footer d-flex">
<button type="submit" class="btn btn-success">修改</button>
<a href="{{ route('user.index') }}" class="btn btn-secondary ml-2">取消</a>
</div>
<!-- /.card-footer -->
</form>
```
## DELETE
front-end
```htmlmixed!
<form method="POST" action="{{ route('todo.destroy',$item['id']) }}" class="mx-1">
@csrf
@method("DELETE")
<button type="submit" onclick="return confirm('即將刪除,是否確定?')"
class="btn btn-danger">
<i class="fas fa-trash-alt"></i>
</button>
</form>
```
back-end
```php
...
public function destroy($id)
{
// https://laravel.com/docs/5.8/eloquent#deleting-models
$todo=Todo::find($id);
$todo->delete();
return back();
}
...
```
## UPDATE
```php
public function update(Request $request, $id)
{
$name = $request->name;
$user=User::find($id);
$is_password_input_blank = 1;
$array_validate = [
'name' => "required|max:255|unique:users,name,$user->id,id",
'password' => 'required|min:3|confirmed',
];
// 若用戶密碼空白則不修改密碼
if (empty(trim($request->password)) == 1) {
unset($array_validate['password']);
$is_password_input_blank = 0;
}
$validator = Validator::make(
$request->all(),
$array_validate,
[
// 自訂錯誤訊息
'name.required' => '請輸入:attribute',
'name.unique' => "用戶名稱已存在",
'password.required' => '請輸入:attribute',
'password.confirmed' => ':attribute欄位不一致',
],
[
// 自定欄位在錯誤訊息中的顯示名稱
'name' => '姓名',
'password' => '密碼',
]
);
if ($validator->fails()) {
//回傳錯誤並重新導向
//前端網頁要加上相關語法
return redirect(route('user.edit',$user))
->withErrors($validator)
->withInput();
} else {
User::find($id)->update(['name'=>$name]);
if($is_password_input_blank == 1){
User::find($id)->update(['password'=>Hash::make($request->password)]);
}
return redirect('/user/user')->with([
'success'=>"用戶'$request->name'已修改"
]);
}
}
```