Фабрика Laravel

#laravel #eloquent #factory

Вопрос:

Привет, я новичок в создании фабрик на Laravel и создаю веб-сайт блога. В настоящее время пользователи не нужны, так как это черновик, но я пытаюсь создать фабрику для создания фиктивных сообщений в блоге.

У меня есть Post.php файл, который выглядит следующим образом:

 namespace App;

use IlluminateDatabaseEloquentModel;

class Post extends Model
{
    protected $table = 'posts';

    public $primaryKey = 'id';

    public $timestamps = true;
}
 

Мой постфактум выглядит так

 use AppPost;
use FakerGenerator as Faker;
use IlluminateSupportStr;

$factory->define(AppPost::class, function (Faker $faker) {
    return [
        'title' => $faker->name,
        'body' => $faker->unique()->safeEmail,
    ];
});
 

но каждый раз, когда я пытаюсь создать записи, он выдает ошибку «Исключение InvalidArgumentException с сообщением» Не удается найти фабрику для [приложения/сообщения]».
я знаю, что речь идет о связывании этих файлов, но я не могу понять, как это сделать.

Комментарии:

1. Файл для вашей почтовой модели должен называться Post.php и не posts.php называться . Кроме того, все те свойства, которые вы объявили в своей модели, являются ненужными и автоматически объявляются Laravel.

Ответ №1:

Во-первых, как упоминалось выше, ваш файл должен быть назван Post.php и не posts.php.

Поскольку вы используете AppPost в начале своего файла, вы можете просто позвонить Post::class
$factory->define(Post::class, function (Faker $faker)

Другим вариантом также может быть отсутствие папки factories в карте классов composer:

 "autoload": {
        "psr-4": {
            "App\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },
 

Если это не решит проблему, то вам, возможно, потребуется опубликовать свой код там, где вы звоните на свой завод

@редактировать

это довольно хороший обзор конвенций

Комментарии:

1. Извините, где должна называться фабрика, в controller.php и т. д

2. или в вашей сеялке, где вам нужны какие-то фиктивные данные, но работает ли это с изменениями сейчас?

3. изменение поста на сообщения действительно работает, однако в моей общей системе оно не запускается из-за того, что я создаю с помощью поста, так как во всей системе в любом случае можно справиться с этим без изменения системы, почему это работает для сообщений, а не для сообщений

4. Это связано с автоматическим определением имен файлов laravels. Если следовать правильно, Laravel способен самостоятельно идентифицировать все отношения такого рода. Например, он также обнаружит таблицу базы данных без необходимости указывать $table атрибут. Я бы просто переименовал ваш файл в Post.php этого должно быть достаточно. @cliff12345

5. Извините, что я не понимаю, сообщение класса используется во всей системе, но имя таблиц-сообщения. почему фабрика не работает, связано ли это с тем, что таблица называется » сообщения