【问题标题】:Cannot merge on an Eloquent collection in Laravel无法在 Laravel 中的 Eloquent 集合上合并
【发布时间】:2015-11-11 15:42:38
【问题描述】:

我需要在 Laravel 5.1 中合并一个集合或一个数组(可以是任何一个),但我在 Builder.php 第 2071 行收到错误 BadMethodCallException:调用未定义的方法 Illuminate\Database\Query\Builder::合并()

当我从头开始创建一个集合时,我可以合并到它,但我不能合并到一个 Eloquent 查询的结果,我认为这也是集合。但也许这不是真的?

给出错误的代码:

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

如果我改为使用 $tomerge->merge($user) 它可以工作,但这不是我真正需要的。有没有办法根据需要使用合并?

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    回答您关于为什么它不起作用的问题...

    $user = User::where('user_last_name', 'Doe')->first();
    

    这是模型的单个实例。不是收藏。雄辩的模型没有merge 方法。

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

    protected $appends = ['book', 'foot'];
    
    public function getBookAttribute()
    {
        return 'desk';
    }
    public function getFootAttribute()
    {
        return 'chair';
    }
    

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

    【讨论】:

    • 谢谢,托马斯·金!没有收藏说明了这个问题。我能够遍历我想要添加的值并将它们一一粘贴。也许不是我最优雅的解决方案,但现在我知道我需要尝试另一种方式。 :)
    猜你喜欢
    • 1970-01-01
    • 2018-11-11
    • 2019-10-13
    • 2021-07-15
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2017-04-12
    • 2019-09-08
    相关资源
    最近更新 更多