我正在使用Laravel 8开发Web应用程序。我注意到,包括工厂在内的Laravel 8发生了很多变化。
我的MenuCategory模型类具有一个工厂类MenuCategoryFactory,具有以下定义。
<?php
namespace Database\Factories;
use App\Models\Menu;
use App\Models\MenuCategory;
use Illuminate\Database\Eloquent\Factories\Factory;
class MenuCategoryFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = MenuCategory::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'name' => $this->faker->name,
'menu_id' => Menu::factory()->create(),
];
}
}
在我的代码(数据库播种器类)中,我试图在创建工厂时按如下方式覆盖menu_id。
$restaurant = Restaurant::first();
MenuCategory::factory()->create([
'menu_id' => $restaurant->menu->id
]);
但是它没有使用我传递的值$ restaurant-> menu-> id。相反,它正在创建一个新菜单。我的代码中缺少什么错误?如何解决?
答案 0 :(得分:0)
将定义更改为
public function definition()
{
return [
'name' => $this->faker->name,
'menu_id' => function() {
Menu::factory()->create()->id,
}
];
}
然后你可以替换值