在Laravel中无法对Eloquent集合执行合并操作

4

我需要在Laravel 5.1中合并一个集合或数组(可以是任何一种),但是我收到了错误信息BadMethodCallException in Builder.php line 2071: Call to undefined method Illuminate\Database\Query\Builder::merge()。

当我从头开始创建一个集合时,我可以将其合并,但是我不能将其合并到Eloquent查询结果上,尽管我认为它们也是集合。但也许这并不正确?

导致错误的代码:

$user=User::where('user_last_name', 'Doe')->first();
$tomerge = collect(['book' => 'desk', 'foot' => 'chair']);
$newcollect = $user->merge($tomerge);

如果我改为使用$tomerge->merge($user),那么它可以工作,但这不是我实际需要的。有没有一种方法可以按照我的要求使用merge?
1个回答

7
回答你关于为什么它不起作用的问题...
$user = User::where('user_last_name', 'Doe')->first();

这是一个模型的单个实例,不是集合。Eloquent 模型没有 merge 方法。

如果您想向 Eloquent 模型附加属性,最简单的方法可能是使用 $appends 属性和适当的访问器。例如,在您的 User 模型中...

protected $appends = ['book', 'foot'];

public function getBookAttribute()
{
    return 'desk';
}
public function getFootAttribute()
{
    return 'chair';
}

请注意,这将影响您用户模型的每个实例。


谢谢,Thomas Kim!没有集合解释了这个问题。我能够遍历我想要添加的值,并逐个将它们粘贴上去。也许这不是我最优雅的解决方案,但现在我知道我需要尝试另一种方法,它可以工作。 :) - llhilton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接