我正在尝试使用种子和工厂为我的模型创建播种机。我的模特有一对多的关系。我跑的时候
php artisan db:seed --class=ChildTableSeeder
我收到以下错误:
In Builder.php line 2461:
Call to undefined method Illuminate\Database\Query\Builder::save()
独立于错误,数据种子将添加到目标表中。
我的表结构如下:
parents
- parentId
- name
- value
childs
- childId
- parentId
- views
- count
我的模特:
//Parent.php
<?php
namespace App\Models\Api;
use Illuminate\Database\Eloquent\Model;
class Parent extends Model
{
protected $primaryKey = 'parentId';
public $incrementing = false;
protected $keyType = 'string';
}
//Child.php
<?php
namespace App\Models\Api;
use Illuminate\Database\Eloquent\Model;
class Child extends Model
{
protected $primaryKey = 'childId';
public $incrementing = false;
protected $keyType = 'string';
public function parents()
{
return $this->belongsTo('App\Models\Api\Parent', 'parentId', 'parentId');
}
}
另请参阅种子代码
//ParentTableSeeder
factory(App\Models\Api\Child::class, 50)->create()->each(function ($u) {
$u->parents()->save(factory(App\Models\Api\Parent::class)->make());
});
任何人都知道我做错了什么?或者如何解决这个问题?
答案 0 :(得分:2)
您需要使用associate()
save()
功能
同样parents()
关系的定义是错误的
public function parents()
{
return $this->belongsTo('App\Models\Api\Parent', 'parentId', 'childId');
}
答案 1 :(得分:0)
创建关系时使用associate
方法代替save
:
$p = factory(App\Models\Api\Parent::class)->create():
$u->parents()->associate($p);
$u->save();