Laravel Eloquent-关系上的firstOrCreate()

Kousha

当我尝试firstOrCreate()其他模型的关系时,它不起作用:

Client::find($id)->users()->firstOrCreate(array('email' => $email));

这返回一个错误说

调用未定义的方法Illuminate \ Database \ Query \ Builder :: firstOrCreate()

不过,直接在模型上运行它User会起作用。

德拉巴贝

这将行不通,您必须使用User模型手动/直接执行此操作,因为users()应该返回一个集合对象

没错,users()函数不会返回(新的,空的或已创建的)用户模型,而是返回一个集合对象。

如果您使用的是laravel关系,它也会在http://laravel.com/docs/5.1/eloquent-relationships#inserting-related-models中记录

您误解了该文档。关系对象具有create()方法和save()方法,但是关系对象不是完整的模型对象。要获得完整的User模型对象(例如firstOrCreate())的所有功能,则必须在模型对象上调用它们。

因此,例如,此代码应工作:

$user = User::firstOrNew(array('email' => $email));
Client::find($id)->users()->save($user);

请注意,可以直接从客户端模型的关系中将$ user对象保存在此处,即使它可能已经存在于此处,也应该在执行此操作时只更新$ user对象上的client_id字段。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章