我正在使用 laravel 工厂方法来填充我的数据库表。我有三个模型,它们之间的关系如下:
**User model**
class User extends Authenticatable
{
public function books() {
return $this->hasMany('App\Book', 'user_id', 'id');
}
public function ratings() {
return $this->hasMany('App\Rating', 'user_id', 'id');
}
}
**Book Model**
class Book extends Model
{
public function user() {
return $this->belongsTo('App\User', 'user_id', 'id');
}
public function ratings() {
return $this->hasMany('App\Rating', 'book_id', 'id');
}
**Rating Model**
class Rating extends Model
{
public function book() {
return $this->belongsTo('App\Book', 'book_id', 'id');
}
public function user() {
return $this->belongsTo('App\User', 'user_id', 'id');
}
}
我对模型 Book 和 Rating 的工厂定义如下所示:
$factory->define(Book::class, function (Faker $faker) {
return [
'title' => $faker->title,
'description' => $faker->sentence
];
});
$factory->define(Rating::class, function (Faker $faker) {
return [
'rating' => $faker->numberBetween(1,5)
];
});
数据库表如下所示:
用户表:
id,name,email,password
书台:
id,user_id,title,description
评分表:
id,user_id,book_id,rating
调用工厂的代码如下:
public function run()
{
//create 10 users
$user = factory(App\User::class,10)->create();
// create 2 books for each user
$user->each(function ($user) {
$book = $user->books()->saveMany(factory(App\Book::class,2)->make());
});
});
所以通过这种运行方法,我可以创建 10 个用户,每个用户有两本书。但我也想让每本书由 3 个不同的用户评分。那么我应该在上面的方法中添加什么额外的代码来实现这一点。