我想使用 laravel 8 工厂为我的数据库做种。我有一家商店,每个商店都可以有多个活动。
所以在我的商店模型中我定义了关系:
public function campaigns() {
return $this->hasMany('App\Models\ShopCampaign','id_shop', 'ID');
}
在活动模型中也定义了逆关系
public function shop() {
return $this->belongsTo('App\Models\Shop','id_shop', 'ID');
}
然后我定义了活动工厂:
namespace Database\Factories;
use App\Models\ShopCampaign;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Carbon;
class ShopCampaignFactory extends Factory
{
protected $model = ShopCampaign::class;
public function definition()
{
$date_ins = Carbon::createFromTimestamp($this->faker->dateTimeBetween('-1 week', '-2 days')->getTimeStamp());
$starts_at = Carbon::createFromFormat('Y-m-d H:i:s', $date_ins)->addDays( $this->faker->numberBetween( 2, 5 ) );
$ends_at= Carbon::createFromFormat('Y-m-d H:i:s', $starts_at)->addDays( $this->faker->numberBetween( 20, 30 ) );
$attributes = [
'datestart' => $starts_at,
'dateend' => $ends_at,
'name' => 'Test',
'dateins' => $date_ins
];
return $attributes;
}
}
现在我想要实现的结果是创建 5 个商店,每个商店都必须有 3 个活动广告系列。这意味着在创建广告系列时必须填充 id_shop
。但是我认为 id 应该神奇地被定义的关系所采用。但是如果我创建一个种子类并调用:
Shop::factory(5)->has(ShopCampaign::factory()->count(3), 'campaigns')->create();
我得到了:
Call to undefined method App\Models\ShopCampaign::factory()
我做错了什么?
答案 0 :(得分:0)
我刚刚发现了答案,手册上没有写清楚。在 ShopCampaign 手册中,您必须添加:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class ShopCampaign extends Model
{
use HasFactory;
[...]
}