answer Lý Duy Minh · Lý Duy Minh 18:11 17/09/2020 Nếu bạn đã nâng cấp lên 8 từ phiên bản trước, có thể bạn đang thiếu chỉ thị tự động nạp cho Database\Factorieskhông gian tên trong composer.json: "autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" } },Bạn cũng có thể xóa classmapphần này vì nó không còn cần thiết nữa. Chạy composer dumpsau khi thực hiện những thay đổi này. Tài liệu Laravel 8.x - Hướng dẫn Nâng cấp - Cơ sở dữ liệu - Không gian tên gốc và Nhà máy 30 hữu ích 1 bình luận chia sẻ answer Hoàng Uyên Thơ · Hoàng Uyên Thơ 09:34 03/11/2020 Rõ ràng bạn cũng phải tôn trọng cấu trúc thư mục. Ví dụ: nếu bạn có Mô hình người dùng trong đường dẫn sau:, app\Models\Users\Userthì nhà máy tương ứng sẽ được đặt tại database\factories\Users\UserFactory. 5 hữu ích 0 bình luận chia sẻ answer Hoàng Quốc Thiên · Hoàng Quốc Thiên 06:19 12/11/2020 Tôi đang trong quá trình chuyển từ laravel 7 sang 8. Sau khi đập đầu vào tường một lúc và xem mã nguồn, tôi thấy rằng bạn có thể tùy chọn ghi đè lớp nhà máy nào được gọi cho một mô hình bằng cách sử dụng newFactoryphương thức trên mô hình. Sau đó, tôi cũng nhận thấy rằng nó LÀ trong tài liệu ( https://laravel.com/docs/8.x/database-testing#creating-models ) - Tôi chỉ không hiểu nó có nghĩa là gì trong lần đầu tiên tôi đọc nó. Bây giờ tôi làm. Tôi đã giải quyết vấn đề này bằng cách sau: <?php namespace My\Fancy\Models; use Database\Factories\SomeFancyFactory; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class SomeClass extends Model { use HasFactory; /** @return SomeFancyFactory */ protected static function newFactory() { return SomeFancyFactory::new(); } }Sau sự thay đổi này, các bài kiểm tra của tôi đã vượt qua như mong đợi. 4 hữu ích 2 bình luận chia sẻ answer Hoàng Yến Hồng · Hoàng Yến Hồng 16:29 28/11/2020 Bạn cần đảm bảo rằng không gian tên giống nhau: như hình dưới đây: nếu không điều này sẽ khiến bạn mất nhiều thời gian. Tên của nhà máy là name of the model+Factory ví dụ app\models\User- sẽ khớp vớidatabase/factories/UserFactory cuối cùng đảm bảo bạn chạy: composer dumpautoload 4 hữu ích 3 bình luận chia sẻ answer Dương Đức Huy · Dương Đức Huy 10:31 19/02/2021 Có thể là tất cả mọi thứ là hoàn hảo chỉ cần chạy composer dump-autoload. Nó đã xảy ra với tôi. 1 hữu ích 0 bình luận chia sẻ answer Hoàng Duy An · Hoàng Duy An 10:57 27/03/2021 Trong trường hợp của riêng tôi, nó xảy ra trong một dự án Laravel 8 tức là nó không phải là một dự án tôi đã nâng cấp từ Laravel 7. Và tôi nhận thấy điều này sau khi thực hiện composer updategần đây. 1: Khi tạo mô hình, hãy tạo nhà máy cùng với php artisan make:model BusinessUser -f // -f creates the factory2: Đối với các mô hình cũ của bạn, hãy bình luận use HasFactory;hoặc chỉ tạo nhà máy php artisan make:factory BusinessUserFactory -m1 hữu ích 0 bình luận chia sẻ answer Đỗ Mai Ly · Đỗ Mai Ly 02:57 06/12/2020 Tôi đã gặp vấn đề tương tự, nhưng vì một lý do khác. Nếu bạn đang sử dụng các nhà máy trong setUpchức năng thử nghiệm, hãy đảm bảo:
0 hữu ích 1 bình luận chia sẻ answer Phan Thanh Hậu · Phan Thanh Hậu 05:29 18/10/2020 Hôm nay tôi gặp sự cố dưới đây sau khi nâng cấp dự án của mình từ Laravel 7lên Laravel 8và cập nhật nó trực tuyến trên máy chủ. Trait 'Illuminate\Database\Eloquent\Factories\HasFactory' not foundNgay cả khi tôi đã cập nhật composer.jsonchỉ thị autoload được @lagbox đưa ra trong câu trả lời nhưng nó không giải quyết được vấn đề cho tôi. Cuối cùng tôi đã cập nhật vendorsthư mục hoàn chỉnh trực tuyến đã giải quyết được sự cố của tôi. -1 hữu ích 3 bình luận chia sẻ answer Trịnh Hồng Công · Trịnh Hồng Công 07:23 03/06/2021 Thêm điều này vào AppServiceProvider::boot()để ngăn không gian tên đoán mô hình. Factory::guessFactoryNamesUsing(function (string $modelName) { return 'Database\\Factories\\' . Arr::last(explode('\\', $modelName)) . 'Factory'; });-1 hữu ích 0 bình luận chia sẻ |