在 Laravel 中设置与数据库字段同名的属性返回错误

我的项目有问题。我有一个字段名称 contact_number 我以这种格式存储 json 数据{"code":"","number":""}。我想设置两个属性名称getCountryCodeAttribute,getContactNumberAttribute以便我可以code单独访问number。但它会引发错误


Undefined property: App\Models\Profile::$contact_number

我的模型代码是


?php


namespace App\Models;


class Profile extends Model

{

    use SoftDeletes;

    protected $guarded = [];


    protected $casts = [

        'contact_number' => 'array',

    ];


    public function getCountryCodeAttribute()

    {

        $contact_number = $this->contact_number;

        return $contact_number['code'];

    }


    public function getContactNumberAttribute()

    {

        $contact_number = $this->contact_number;

        return $contact_number['number'];

    }


}

我不知道如何解决这个问题。在此先感谢您的帮助


暮色呼如
浏览 173回答 3
3回答

慕哥6287543

您已经有一个名为 的字段contact_number,但是您想定义一个属性 contract_number,这是错误的,请尝试使用其他名称。你contract_number的是 json 格式。从数据库中取出后,需要解码,否则为字符串,不能使用$contact_number['number']。public function getProfileContractCodeAttribute(){    $contact_number = json_decode($this->contact_number, true);    return $contact_number['code'];}public function getProfileContractNumberAttribute(){    $contact_number = json_decode($this->contact_number, true);    return $contact_number['number'];}所以你可以得到这样的属性:Profile::find(1)->profile_contract_number;

芜湖不芜

在accessor您无法访问该属性的范围内。所以是Undefined    public function getContactNumberAttribute()    {        $contact_number = $this->contact_number;//$this->contact_number is not valid        return $contact_number['number'];    }将ContactNumber部分更改为其他内容PhoneNumber    public function getCountryCodeAttribute()    {        $contact_number = $this->contact_number;        return $contact_number['code'];    }    public function getPhoneNumberAttribute()    {        $contact_number = $this->contact_number;        return $contact_number['number'];    }然后像这样访问它。    dd(User::find(1)->phone_number);    dd(User::find(1)->country_code);

jeck猫

试试看json_decodepublic function getCountryCodeAttribute(){    $contact_number = json_decode($this->contact_number);    return $contact_number['code'];}public function getContactNumberAttribute(){    $contact_number = json_decode($this->contact_number);    return $contact_number['number'];}
打开App,查看更多内容
随时随地看视频慕课网APP