Laravel getNameAttribute 不适用于搜索

我有Account模型,里面有这个方法:


public function getNameAttribute()

{

    if(\App::getLocale() == 'en')

        return $this->attributes['foreign_name'];

    else

        return $this->attributes['name'];

}

在索引页面中它正在工作。如果 locale 是enname 将是foreign_name,如下图:

http://img3.mukewang.com/6402eb400001b76c06550155.jpg

但是我有搜索方法,这是代码:


public static function search_and_select($keyword)

{

    $keyword = Helper::clean_keyword($keyword);

    $data = Account::where

    ('number','like','%'.$keyword.'%')->

    orWhere('name','like','%'.$keyword.'%')->

    limit(30)->

    get(['user_id','number','name']);

    if(count($data) == 0)

        return Helper::no_result();

    return [$data,['number','name']];       

}

如果我尝试搜索任何内容,我会收到此错误:


message: "Undefined index: foreign_name"

    1: {,…}

class: "App\Models\Account"

file: "C:\xampp\htdocs\laravel\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php"

function: "getNameAttribute"

line: 465

type: "->"

2: {,…}

class: "Illuminate\Database\Eloquent\Model"

file: "C:\xampp\htdocs\laravel\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php"

function: "mutateAttribute"

line: 479

type: "->"

但如果我改变:


return $this->attributes['foreign_name'];


return $this->attributes['id']; // or any integer field in the accounts table 

它工作没有问题。


在 Laravel 6 中,它和我一样工作,但现在我得到了这个错误。这里有什么帮助吗?


明月笑刀无情
浏览 208回答 1
1回答

翻阅古今

这是因为你的线get(['user_id','number','name'])哪个要求只获取这些列。您需要将 foreign_name 添加到此数组并使其成为get(['user_id','number','name', 'foreign_name'])根据 Laravel参考,get 函数接受列列表。同样适用于其他功能
打开App,查看更多内容
随时随地看视频慕课网APP