在种子上调用未定义的方法Illuminate \ Database \ Query \ Builder :: save()

时间:2018-01-29 18:14:33

标签: laravel laravel-5 laravel-5.5

我正在尝试使用种子和工厂为我的模型创建播种机。我的模特有一对多的关系。我跑的时候

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());
});

任何人都知道我做错了什么?或者如何解决这个问题?

2 个答案:

答案 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();