为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
暮色呼如 2022-05-27 16:35:39
我的项目有问题。我有一个字段名称 contact_number 我以这种格式存储 json 数据{"code":"","number":""}。我想设置两个属性名称getCountryCodeAttribute,getContactNumberAttribute以便我可以code单独访问number。但它会引发错误Undefined property: App\Models\Profile::$contact_number我的模型代码是?phpnamespace 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'];    }}我不知道如何解决这个问题。在此先感谢您的帮助
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

  1. 您已经有一个名为 的字段contact_number,但是您想定义一个属性 contract_number,这是错误的,请尝试使用其他名称。

  2. 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;


查看完整回答
反对 回复 2022-05-27
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

在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);


查看完整回答
反对 回复 2022-05-27
?
jeck猫

TA贡献1909条经验 获得超7个赞

试试看json_decode


public 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'];

}


查看完整回答
反对 回复 2022-05-27
  • 3 回答
  • 0 关注
  • 172 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信