我最近开始与工作Laravel和口才,和不知道的是,缺乏一个查找或创建模型选项.你总是可以写,例如:
$user = User::find($id);
if (!$user) {
$user = new User;
}
Run Code Online (Sandbox Code Playgroud)
但是,有没有更好的方法来查找或创建?看来在这个例子中微不足道,但对于更复杂的情况下,这将是非常有益要么让现有的记录并更新或创建一个新的.
通常情况下,某个雄辩模型的关系未设置(即在书籍表中,author_id为空),因此调用类似$ model-> relation的东西会返回null.
例如,说Book模型有一个我可能想做的author()(hasOne)关系
$author = Book::find(1)->author->name;
Run Code Online (Sandbox Code Playgroud)
如果第1册没有设置作者,它将抛出"试图获取非对象属性"错误.有没有办法避免这种情况并默认为空白,Author所以name无论是否为特定模型设置了关系,我总能调用它?
基本上我想在调用其他方法/属性之前避免条件检查是否$book->author是实际的Author.如果未设置关系,它应默认为新的Author实例.
我尝试过类似的东西:
public function getAuthorAttribute($author)
{
return $author ?: new Author;
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用; $author即使在模型上设置,也会传入null.大概是因为它是一种关系,而不是一本书的直接属性.我需要类似的东西
public function getAuthorAttribute()
{
return $this->author()->first() ?: new Author;
}
Run Code Online (Sandbox Code Playgroud)
这似乎非常优雅,似乎它会覆盖任何急切的负载,导致性能不佳.