使用 Laravel 5.4 播种功能时出错
Posted
技术标签:
【中文标题】使用 Laravel 5.4 播种功能时出错【英文标题】:Error when using Laravel 5.4 Seeder Function 【发布时间】:2017-08-21 04:19:05 【问题描述】:类型错误:参数 1 传递给 Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() 必须是 Illuminate\Database\Eloquent\Model 的实例, Illuminate\Database\Eloquent\Collection 给定
我计划为具有个人资料的用户生成假日期。我有两个模型:用户和个人资料。我已经完成了彼此的关系。但是当我执行它时,问题就来了。以上是我运行 Seeder 时的错误。
这是发现错误的类。
public function run()
factory(App\User::class, 40)->create()->each(
function($user)
$user->profile()->save(
factory(App\Profile::class, 1)->make()
);
);
【问题讨论】:
【参考方案1】:我猜你使用的是 Laravel 5.4。
对 factory() 辅助方法进行了修改。来自文档:
工厂助手 调用 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()
【讨论】:
感谢您的回复。是的,我正在使用 laravel 5.4。你能具体说明应该删除什么吗?因为我是初学者,不知道它是如何工作的。【参考方案2】:通过调用方法获取$user->profile()
的关系,会将相关模型作为Collection
返回。您可以使用$user->profile()->first()
来获得Illuminate\Database\Eloquent\Model
类型的单个结果,或者只使用$user->profile
而不使用()
。
【讨论】:
以上是关于使用 Laravel 5.4 播种功能时出错的主要内容,如果未能解决你的问题,请参考以下文章
在 Laravel 5.4 上安装 cartalyst/tags 时出错