【问题标题】:How to use ->append v. protected $appends in Laravel如何在 Laravel 中使用 ->append v. protected $appends
【发布时间】:2017-03-13 23:54:20
【问题描述】:

如何将属性附加到一个查询而不是模型的所有查询。 我知道您可以通过添加

来为模型中的所有查询添加属性
protected $appends = ['icon'];

public function getIconAttribute(){
    return Gravatar::src($this->email, 100).'&r=g&d=mm';
}

我只想为一个查询添加它

$usernames = User::where('username', 'LIKE', '%'.$request->get('search').'%')
   ->append('icon')->get();

但这给出了错误Call to undefined method Illuminate\Database\Query\Builder::append()

我可以看到方法,但感觉很愚蠢 https://laravel.com/api/5.3/Illuminate/Database/Eloquent/Model.html#method_append

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    append() 方法是Model 的一部分,而不是Builder,因此您必须为每个模型调用它。

    你可以有类似的东西:

    $usernames = User::where('username', 'LIKE', '%' . $request->get('search') . '%')
        ->get()
        ->map(function ($user) {
            return $user->append('icon');
        });
    

    >= Laravel 5.4

    Higher Order Messaging 是在 5.4 中引入的,因此您现在可以这样做:

    $usernames = User::where('username', 'LIKE', '%' . $request->get('search') . '%')
        ->get()
        ->map->append('icon');
    

    >= Laravel 7.6

    append() 方法在 7.6 中被引入 Eloquent Collections:

    $usernames = User::where('username', 'LIKE', '%' . $request->get('search') . '%')
        ->get()
        ->append('icon');
    

    【讨论】:

    • 我看到了这个pull request,这让我觉得你可以在查询中做到这一点?
    • @whoacowboy 你让我抱有希望。不,该拉取请求通常是添加 append() 方法。
    • 这太糟糕了,但我感觉不那么愚蠢了。感谢您的帮助!
    • @whoacowboy 我刚刚尝试发出拉取请求以将append 添加到集合中,但泰勒不会拥有它。
    • 很好,很好的尝试。 Laravel,一个开源框架。发布链接,我会 +1。
    猜你喜欢
    • 2019-08-02
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 2021-09-05
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多