В настоящее время я изучаю фабрики Laravel и то, как они работают. Пока что я нашел их действительно полезными!
Я работаю над каталогом для предприятий, поэтому я пытаюсь просто засеять некоторые фиктивные данные во время разработки.
В настоящее время у меня есть это, поэтому он создает бизнес вместе с пользователем, однако теперь это начинает усложняться, поэтому я публикую здесь.
В бизнесе мне также нужно создавать категории, местоположения, изображения и контакты. Я предполагаю, что все они будут работать одинаково, поэтому я хочу спросить только о категориях.
По сути, то, что я хочу сделать, - это когда бизнес будет создан, я хотел бы создавать категорию для каждых 10 предприятий, так как это позволило бы мне отображать их так, как они выглядели бы в реальной жизненной ситуации.
Итак, в настоящее время у меня есть этот код ...
factory(App\Models\User::class, 50)->create()->each(function ($u) {
$u->business()->save(factory(App\Models\Business::class)->make());
});
Это идеально подходит для создания бизнеса, связанного с пользователем, но где бы я поместил категорию? Придется ли мне здесь творить? И скажите, каждый раз, когда есть число, кратное 10, тогда создавайте категорию? Потому что категория в любом случае не связана с пользователем, поэтому я не смогу делать что-то вроде $u->categeory, мне бы пришлось получить доступ к бизнес-модели.
Это фабрика бизнес-категории ...
$factory->define(App\Models\BusinessCategory::class, function (Faker $faker) {
return [
'friendly_name' => $faker->word,
'slug' => ucfirst($faker->word)
]
});
Заранее спасибо.
Ваше предположение верно, да, это именно то, чего я хочу достичь.
Написал что-то, что должно вас направить. Сообщите мне, если это сработает. Я не уверен на 100%, что $u->business()->save(...) действительно вернет бизнес-модель. В противном случае он не будет работать как есть.






Я не тестировал решение, поэтому, возможно, потребуется выполнить некоторую тонкую настройку, но попробуйте это и дайте мне знать, работает ли оно:
// Number of users
$numberOfUsers = 50;
// Will create roughly 1 business category per 10 users
$businessCategories = factory(App\Models\BusinessCategory::class, round($numberOfUsers/10))->create();
factory(App\Models\User::class, $numberOfUsers)->create()->each(function ($u) use ($businessCategories) {
$business = $u->business()->save(factory(App\Models\Business::class)->make());
// Associate it with a random business category
$business->businessCategory()->attach(
$businessCategories->random()->id
);
});
Редактировать
Или вы можете пойти другим путем и сделать что-то вроде этого:
// Create 5 categories
factory(App\Models\BusinessCategory::class, 5)
->create()
->each(function ($bc) {
// Create 10 users per business category
factory(App\Models\User::class, 10)->create()->each(function ($u) use ($bc) {
// Create a business for the user
$u->business()
->save(factory(App\Models\Business::class)->create([
'business_category_id' => $bc->id // Associate it with the business category
]));
});
});
Оба решения предполагают, что Business принадлежит BusinessCategory. И нижний также предполагает business_category_id для столбца внешнего ключа.
Привет, спасибо за ответ. Первый метод кажется мне наиболее подходящим, однако я получаю сообщение об ошибке: associate не существует. Сейчас попробую второй способ.
Единственная проблема со вторым методом. Он основан на создании пользователей и предприятий. Однако мне также нужно будет делать бизнес-изображения и т. д.
Я это подозревал! Используя вашу базу первого, мне удалось это сделать! В общем, у меня связь belongsToMany, поэтому associate не существует. Следовательно, запуск этой строки $business->categories()->attach($businessCategories->random()->id); делает именно то, что мне нужно!
Ах, отлично! Имеет смысл, ->associate() работал бы с другой стороны. Моя ошибка. Собираюсь отредактировать ответ, чтобы исправить это. Обновлено: на самом деле не будет, он будет работать на belongsTo
Я приму это. Спасибо за это, сначала я не думал, что это возможно, теперь мне нужно сделать это для остальных таблиц, которые у меня есть, но теперь у меня есть основа, которая не должна быть слишком сложной.
У меня есть еще один вопрос, devk, можем ли мы поговорить об этом?
Конечно, я просто не совсем понимаю, как
Будет ли у каждого бизнеса своя категория? Я предполагаю, что вы хотите, чтобы каждый бизнес принадлежал к какой-либо категории, но не каждый бизнес имел новую категорию (поэтому каждые ~ 10 компаний будут иметь одну и ту же категорию). Верно ли мое предположение? Или только 1/10 бизнеса действительно будет иметь категорию.