Cập nhật trong laravel là gì?

Khi xây dựng API, chúng tôi thường bắt gặp các hoạt động CRUD, mặc dù các hoạt động này là một trong những điều đầu tiên chúng tôi học được khi bắt đầu làm việc với phụ trợ, một số hoạt động này có thể có ít mã hơn đáng kể

Bên cạnh đó, mã này thường xuyên bị trùng lặp trên các bộ điều khiển. Trong quá trình làm việc với Laravel, tôi nhận thấy rằng điều này thường xảy ra trong các chức năng cập nhật và đó là lý do tại sao tôi quyết định chia sẻ cách đơn giản hóa việc triển khai này

Nội dung

  • cách thông thường
  • Rút ngắn nó
  • Hàm updateOrFail
  • trừu tượng hóa nó
    • trừu tượng đặc điểm
    • chức năng mô hình
    • Hàm cập nhậtOrThrow
    • ngoại lệ tùy chỉnh
    • Sử dụng sự trừu tượng
    • Thực hiện nó

cách thông thường

Trước khi chúng ta chuyển sang phần đơn giản hóa, chúng ta hãy xem hoạt động cập nhật trông như thế nào khi được triển khai theo quy ước



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::find($request->id);

        if ($user === null) {
            return response(
                "User with id {$request->id} not found",
                Response::HTTP_NOT_FOUND
            );
        }

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Ở dòng đầu tiên, chúng tôi đang truy vấn người dùng bằng ID của họ và lưu kết quả vào đối tượng



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
7

Sau đó, ở điều kiện đầu tiên, chúng tôi đang kiểm tra xem



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
7 có null không, nếu có, điều đó có nghĩa là không tìm thấy bản ghi nào có ID đã cho và thông báo lỗi với trạng thái 404 sẽ được phản hồi

Sau đó, chúng tôi có một điều kiện thứ hai nơi chúng tôi đang gọi



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
1 với dữ liệu mà chúng tôi muốn cập nhật, hàm này trả về true hoặc false để cho chúng tôi biết nếu dữ liệu được cập nhật thành công. Trong trường hợp nó trả về false, một thông báo lỗi với trạng thái 400 sẽ được phản hồi

Cuối cùng, nếu dữ liệu được cập nhật thành công, chúng tôi sẽ hiển thị người dùng được cập nhật dưới dạng phản hồi

Rút ngắn nó

Tại sao không sử dụng hàm trợ giúp



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
2 để rút ngắn mã của chúng tôi?



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Ở dòng đầu tiên, chúng tôi đang truy vấn người dùng bằng ID của họ bằng hàm



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
2. Hàm này có một hành vi đặc biệt trong đó một ngoại lệ được đưa ra trong trường hợp không tìm thấy dữ liệu cho ID đã cho

Để tận dụng tối đa thay đổi này, chúng ta cần biết cách tự động hóa việc xử lý ngoại lệ do



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
2 đưa ra. Nếu không, sẽ cần phải sử dụng khối thử/bắt và số lượng dòng sẽ gần như giống nhau

Như trong ví dụ trước, chúng tôi có một điều kiện mà chúng tôi đang gọi



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
1 với dữ liệu mà chúng tôi muốn cập nhật. Trong trường hợp nó trả về false, một thông báo lỗi với trạng thái 400 sẽ được phản hồi

Cuối cùng, nếu người dùng đã cập nhật chính xác, chúng tôi sẽ hiển thị người dùng đã cập nhật dưới dạng phản hồi

Hàm updateOrFail

GHI CHÚ. Chức năng này sẽ chỉ khả dụng nếu bạn đang sử dụng Laravel trên phiên bản 8. 58. 0 hoặc mới hơn

Bây giờ chúng ta đã thấy hai cách khác nhau để triển khai hành động cập nhật trên Laravel, hãy xem cách chúng ta có thể triển khai điều này bằng hàm



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
6

________số 8

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Ở dòng đầu tiên, chúng tôi đang truy vấn người dùng bằng ID của họ bằng hàm



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
2

Tiếp theo, chúng tôi có một điều kiện thứ hai nơi chúng tôi đang gọi



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
8 với dữ liệu mà chúng tôi muốn cập nhật, hàm này trả về true hoặc false để cho chúng tôi biết nếu dữ liệu được cập nhật thành công. Trong trường hợp nó trả về false, một thông báo lỗi với trạng thái 400 sẽ được phản hồi

Và một lần nữa, nếu người dùng đã cập nhật chính xác, chúng tôi sẽ hiển thị người dùng đã cập nhật dưới dạng phản hồi

GHI CHÚ. Lưu ý rằng hàm updateOrFail() không có bất kỳ sự khác biệt đáng kể nào so với hàm update() và kết quả sử dụng hoàn toàn giống như cách sử dụng được trình bày trong phần trước

Đây là một triển khai rất kỳ lạ trong khung, vì hầu hết các hàm



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
9 thường đưa ra một ngoại lệ. Nếu đúng như vậy, chúng ta chỉ có thể tự động hóa việc xử lý ngoại lệ do hàm


namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
6 đưa ra giống như cách chúng ta đã làm trong bài đăng cuối cùng trong loạt bài về ngoại lệ của tôi

Nếu chúng ta có một hàm



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
9 tiêu chuẩn, thì hàm này sẽ là cách đơn giản nhất để thực hiện một hành động cập nhật trong bộ điều khiển, loại bỏ hoàn toàn nhu cầu về cách tiếp cận sẽ được giải thích trong phần tiếp theo

trừu tượng hóa nó

Hãy xem cách chúng ta có thể trừu tượng hóa việc triển khai này theo cách mà chúng ta có được khả năng sử dụng lại cao với cách sử dụng đơn giản từ sự trừu tượng hóa này

Vì sự trừu tượng hóa này tương tác với các mô hình, tôi muốn tránh sử dụng tính kế thừa vì nó sẽ là một khớp nối quá cao đối với một sự trừu tượng hóa đơn giản như cái này

Hơn nữa, tôi muốn để mở tính kế thừa trong các mô hình để sử dụng, cho dù theo quyết định của thành viên nhóm hay theo một số trường hợp sử dụng cụ thể

Vì lý do đó, tôi đã chọn triển khai tính trừu tượng trong một Đặc điểm. Khác với C++, nơi chúng ta có thể sử dụng đa kế thừa, trong PHP, Trait là cơ chế để giảm các hạn chế xung quanh kế thừa đơn lẻ

Bên cạnh đó, tôi có một quy tắc cá nhân là tôi chỉ sử dụng Đặc điểm khi triển khai được sử dụng lại nhiều, vì hầu hết các bộ điều khiển của tôi đều có hành động cập nhật, trong ngữ cảnh của tôi, đây là thứ được sử dụng lại nhiều

trừu tượng đặc điểm



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
4

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Đặc điểm của chúng tôi sẽ là sự kết hợp của hai chức năng,



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Exceptions\ModelUpdatingException;

class Users extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->updateOrFail($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
2 chịu trách nhiệm trả về một phiên bản của mô hình thực hiện đặc điểm và


namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Exceptions\ModelUpdatingException;

class Users extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->updateOrFail($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
3 chịu trách nhiệm cập nhật mô hình hoặc đưa ra một ngoại lệ trong trường hợp cập nhật không thành công

Ở đây chúng tôi chỉ đơn giản là thực hiện hành vi mà tôi tin rằng đó sẽ là hành vi được mong đợi cho hàm



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
6 gốc mới, trên thực tế, tôi đã từng gọi hàm


namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Exceptions\ModelUpdatingException;

class Users extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->updateOrFail($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
3 là


namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
6 nhưng tôi phải đổi tên nó để không xung đột với hàm


namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
6 được triển khai trong Laravel . 58. 0

chức năng mô hình



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
1

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Như đã đề cập, hàm này chịu trách nhiệm trả về một phiên bản của mô hình triển khai đặc điểm và vì PHP cho phép chúng tôi sử dụng lập trình meta để khởi tạo các lớp, hãy tận dụng lợi thế đó và tự động khởi tạo mô hình theo tên lớp của nó

Tại hàm này, chúng ta có một dòng duy nhất với câu lệnh return khởi tạo một đối tượng mới ra khỏi hàm



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Exceptions\ModelUpdatingException;

class Users extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->updateOrFail($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
8. Để hiểu đầy đủ về cách thức hoạt động của hàm này, hãy giả sử rằng đặc điểm này được triển khai bởi mô hình Người dùng, khi đánh giá kết quả của hàm, chúng ta sẽ nhận được một chuỗi


namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Exceptions\ModelUpdatingException;

class Users extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->updateOrFail($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
9

Khi được đánh giá bởi trình thông dịch, dòng này sẽ tương đương với



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
40, nhưng


namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Exceptions\ModelUpdatingException;

class Users extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->updateOrFail($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
8 mang lại cho chúng ta khả năng lấy tên lớp phù hợp cho từng mô hình triển khai đặc điểm

Hàm cập nhậtOrThrow



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
6

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Trong dòng đầu tiên, lệnh gọi



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
42 chỉ ra rằng chúng ta muốn tương tác với chính đặc điểm đó, sau đó chúng ta đang xâu chuỗi hàm


namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Exceptions\ModelUpdatingException;

class Users extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->updateOrFail($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
2 với nó, có nghĩa là chúng ta đang gọi hàm đã xác định trước đó

Sau đó, chúng tôi đang xâu chuỗi vào hàm



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Exceptions\ModelUpdatingException;

class Users extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->updateOrFail($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
2 gọi hàm


namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
2, chuyển ID của bản ghi mà chúng tôi muốn truy xuất từ ​​​​cơ sở dữ liệu. Khi bản ghi được tìm thấy và một mô hình đã điền được trả về, chúng tôi sẽ xâu chuỗi lệnh gọi hàm


namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
46 chuyển dữ liệu mà chúng tôi muốn cập nhật

Sau đó, chúng tôi có một điều kiện mà chúng tôi đang gọi



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
1, hàm này trả về đúng hoặc sai để cho chúng tôi biết nếu dữ liệu được cập nhật thành công. Trong trường hợp nó trả về false, một ngoại lệ tùy chỉnh sẽ bị ném

Cuối cùng, sau khi cập nhật thành công, chúng tôi trả về mô hình đã cập nhật

ngoại lệ tùy chỉnh

Ở đây chúng tôi đang sử dụng cùng một kỹ thuật được giải thích trong bài đăng Laravel custom exceptions. Nếu bạn chưa đọc bài đăng, hãy dành một chút thời gian để đọc nó, để bạn có thể hiểu được ý nghĩa của phần này



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
3

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Ở định nghĩa lớp, chúng tôi đang mở rộng



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
48, một lớp trừu tượng được sử dụng để thực thi việc triển khai các hàm


namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
49,


namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
10 và


namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
11 và đảm bảo rằng Laravel sẽ có thể tự động xử lý ngoại lệ này

Theo định nghĩa lớp, chúng ta có hàm tạo nơi quảng cáo thuộc tính đang được sử dụng để làm cho mã sạch hơn. Là tham số, chúng tôi có



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
12, chứa ID của bản ghi mà chúng tôi muốn truy vấn từ cơ sở dữ liệu tại Đặc điểm của chúng tôi và


namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
13 nơi có thể tìm thấy tên lớp đầy đủ của mô hình

Bên trong hàm tạo, chúng tôi đang trích xuất tên mô hình ra khỏi tên lớp đầy đủ, tên đầy đủ sẽ giống như



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
14 và chúng tôi chỉ muốn phần Người dùng. Điều này đang được thực hiện, vì vậy chúng tôi có thể tự động hóa thông báo lỗi thành một thứ gì đó có ý nghĩa đối với người tương tác với API của chúng tôi trong trường hợp không thể tìm thấy bản ghi của một ID nhất định

Tiếp theo, chúng tôi triển khai chức năng



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
49 nơi chúng tôi đang trả về trạng thái 400 HTTP

Sau đó, chúng ta có hàm



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
10, trong đó chúng ta đang trả về một chuỗi đã dịch cho biết giải pháp khả thi cho lỗi. Trong trường hợp bạn đang thắc mắc, chuỗi đã dịch sẽ được đánh giá là


namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
17

Cuối cùng, chúng ta có hàm



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
11 trong đó lỗi đã xảy ra được chỉ định, như trong hàm trước chúng ta đang sử dụng một chuỗi đã dịch, nhưng khác với trước đây, ở đây chúng ta đang sử dụng tính năng thay thế tham số từ trans()

Cách tiếp cận này đã được chọn để cung cấp cho chúng tôi thông báo lỗi động với ngữ cảnh. Ở đây, chuỗi đã dịch sẽ được ước tính thành thứ gì đó như



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
19

Với cấu trúc này, nếu mô hình đích thay đổi, thông báo do ngoại lệ phát ra cũng sẽ thay đổi do tên mô hình được xác định động

Như một ví dụ phụ, hãy tưởng tượng rằng bây giờ, bạn đang tương tác với một mô hình Bán hàng, trong trường hợp này, thông báo sẽ tự động thay đổi thành



namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UsersController extends Controller
{
    public function update(Request $request): Response
    {
        $user = User::findOrFail($request->id);

        if ($user->update($request->all()) === false) {
            return response(
                "Couldn't update the user with id {$request->id}",
                Response::HTTP_BAD_REQUEST
            );
        }

        return response($user);
    }
}
60

Sử dụng sự trừu tượng

Bây giờ, phần trừu tượng hóa của chúng tôi đã được xác định và chúng tôi đảm bảo rằng việc xử lý lỗi đã được thực hiện, chúng tôi cần sử dụng Đặc điểm UpdateOrThrow của mình trong các mô hình mà chúng tôi muốn có hành vi cập nhật đơn giản hóa này

Làm cách nào để cập nhật dữ liệu trong Laravel?

Chúng tôi có thể cập nhật các bản ghi bằng cách sử dụng mặt tiền DB với phương thức cập nhật . Cú pháp của phương thức cập nhật như trong bảng sau. Chạy một câu lệnh cập nhật đối với cơ sở dữ liệu.

Làm cách nào để thực hiện thao tác cập nhật trong Laravel?

Thao tác cập nhật .
chỉnh sửa chức năng công khai ($ id)
$crud= Thô. tìm($id);
quay lại chế độ xem ('chỉnh sửa', thu gọn ('crud'));

Làm cách nào để tạo hoặc cập nhật trong Laravel?

Nói chung, trong Laravel, chúng tôi sử dụng phương thức create() để tạo dữ liệu mới và phương thức update() để cập nhật dữ liệu của chúng tôi vào cơ sở dữ liệu. But there is a way to use both methods at a time like when it needs to create new data it uses the create() method and to update the data it uses the update().

Làm cách nào để cập nhật người dùng trong Laravel?

Làm cách nào để cập nhật tên và email của người dùng trong Laravel? .
Chuyển đến tài nguyên/lượt xem/trang chủ. lưỡi. php và viết đoạn mã sau. -
Sau đó, Xác định chức năng của profileupdate bên trong app/Http/Controllers/HomeController. .
Bây giờ, Đi đến tuyến đường/web. php và xác định tất cả các tuyến đường này và viết mã sau đây