Kou*_*sha 6 php relationship laravel eloquent
当我尝试firstOrCreate()另一个模型的关系时,它不起作用:
Client::find($id)->users()->firstOrCreate(array('email' => $email));
Run Code Online (Sandbox Code Playgroud)
这会返回错误说明
调用未定义的方法Illuminate\Database\Query\Builder :: firstOrCreate()
直接在模型上运行它User会起作用.
这行不通,您必须手动/直接使用 User 模型来完成,因为 users() 应该返回一个集合对象
这是正确的, users() 函数不返回(新的、空的或创建的)用户模型,它返回一个集合对象。
如果您使用 laravel 关系而不是它应该工作,它还记录了http://laravel.com/docs/5.1/eloquent-relationships#inserting-related-models。
您误解了该文件。关系对象有一个 create() 方法和一个 save() 方法,但是关系对象不是一个完整的模型对象。要获得完整用户模型对象(例如 firstOrCreate())的所有功能,您必须在模型对象上调用它们。
因此,例如,此代码应该可以工作:
$user = User::firstOrNew(array('email' => $email));
Client::find($id)->users()->save($user);
Run Code Online (Sandbox Code Playgroud)
请注意,从 Client 模型的关系中直接将 $user 对象保存在此处应该没问题,即使它可能已经存在于此处,但在您这样做时它应该只更新 $user 对象上的 client_id 字段。