在 Laravel 测试中对 null 调用成员函数 save()

到目前为止我有一个类别模型:


class Category extends Model

{   

    protected $fillable = [

        'name',

        'slug',

        'order'

    ];


    public function scopeParents(Builder $builder){

        $builder->whereNull('parent_id');

    }


    public function scopeOrder(Builder $builder, $direction = 'asc'){

        $builder->orderBy('order', $direction);

    }


    public function children(){

        $this->hasMany(Category::class, 'parent_id', 'id');

    }

}

一个工厂:


$factory->define(Category::class, function (Faker $faker) {

    return [

        'name' => $name = $faker->unique()->name,

        'slug' => Str::slug($name)

    ];

});

还有一个测试


public function test_it_has_many_children()

    {

        $category = factory(Category::class)->create();


        $category->children()->save(

            factory(Category::class)->create()

        );


        $this->assertInstanceOf(Category::class, $category->children->first());

    }

但是,当我运行测试时,我得到:


Call to a member function save() on null


  at tests/Unit/Models/Categories/CategoryTest.php:14

    10|     public function test_it_many_children()

    11|     {

    12|         $category = factory(Category::class)->create();

    13| 

  > 14|         $category->children()->save(

    15|             factory(Category::class)->create()

    16|         );

    17| 

    18|         $this->assertInstanceOf(Category::class, $category->children->first());

是什么赋予了?该课程已经有几年的历史了,所以我认为 Laravel 版本之间存在一些差异,但这似乎更基本。


汪汪一只猫
浏览 100回答 1
1回答

慕的地6264312

您的关系方法中缺少返回:public function children(){     return $this->hasMany(Category::class, 'parent_id', 'id'); }
打开App,查看更多内容
随时随地看视频慕课网APP