使用Laravel 5.4播种机功能时出错

时间:2017-03-28 07:51:45

标签: laravel

  

类型错误:参数1传递给   Illuminate \ Database \ Eloquent \ Relations \ HasOneOrMany :: save()必须是   Illuminate \ Database \ Eloquent \ Model的实例,实例   Illuminate \ Database \ Eloquent \ Collection

我打算为有个人资料的用户生成假日期。我有两个型号:User&轮廓。我已经与彼此建立了关系。但是当我执行它并且问题来了。以上是我运行Seeder时的错误。

这是发现错误的类。

public function run()
{
    factory(App\User::class, 40)->create()->each(
        function($user) {
            $user->profile()->save(
                factory(App\Profile::class, 1)->make()
            );
        }
    );
}

2 个答案:

答案 0 :(得分:1)

我猜你正在使用Laravel 5.4。

这是factory()辅助方法的修改。来自文档:

  

工厂助手   调用工厂(User :: class,1) - > make()或factory(User :: class,1) - > create()现在将返回一个包含一个项目的集合。以前,这将返回单一模型。如果未提供金额,此方法将仅返回单个模型。

Laravel 5.3 to 5.4 updgrade guide

这意味着您应该从factory()调用中删除1。

public function run(){
factory(App\User::class, 40)->create()->each(
    function($user) {
        $user->profile()->save(
            factory(App\Profile::class)->make()
        );
    }
);}

编辑1:您必须更改此行:

factory(App\Profile::class, 1)->make()

到此

factory(App\Profile::class)->make()

答案 1 :(得分:0)

通过调用方法获取关系$user->profile(),将相关模型作为Collection返回。您可以$user->profile()->first()执行Illuminate\Database\Eloquent\Model类型的结果,或仅$user->profile的{​​{1}}结果。