如何使用 - >追加诉。受保护的$附加在Laravel

时间:2016-10-31 20:20:39

标签: laravel laravel-5

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

为模型中的所有查询添加属性
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

1 个答案:

答案 0 :(得分:6)

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

你可以拥有类似的东西:

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

> = Laravel 5.4

5.4中引入了

Higher Order Messaging,现在您可以这样做:

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

希望这有帮助!