【问题标题】:How can I use an accessor to create a text field from a binary field?如何使用访问器从二进制字段创建文本字段?
【发布时间】:2015-04-29 18:58:54
【问题描述】:

在 Laravel 5 中,我有一个名为“微芯片”的二进制字段,它是一个二进制字段。如果原始字段分别包含 1 或 0,我想构建一个输出“是”或“否”的访问器函数。我有这个:

    public function getMicrochipTextAttribute($input)
    {
    switch($input)
    {
        case 0:
            return "No";
        break;
        case 1:
            return "Yes";
        break;
    }
}

不幸的是,当我使用 $model->microchip_text 时,无论 $input 的内容如何,​​它都会返回“No”。无论 $input 包含 1 还是 0,它都输出“No”。

【问题讨论】:

    标签: php laravel accessor


    【解决方案1】:

    这是因为 Eloquent 不知道您使用的是什么 $input,因为您正在为新属性而不是现有属性创建访问器。相反,试试这个:

    public function getMicrochipTextAttribute()
    {
        switch($this->attributes['microchip'])
        {
            case 0:
                return "No";
            break;
            case 1:
                return "Yes";
            break;
        }
    }
    

    或更短的版本:

    public function getMicrochipTextAttribute()
    {
        return $this->attributes['microchip'] ? 'Yes' : 'No';
    }
    

    【讨论】:

    • 谢谢!这成功了。那么,假设使用 $input 作为参数是为修改器而不是访问器保留的做法,我是否正确?
    • @KinsDotNet $input 适用于访问器,但仅当您为现有属性创建访问器时。例如:getMicrochipAttributemicrochip 存在?是的,所以注入它的值)。 getFooBarAttributefoo_bar 存在?不,所以什么都不注入)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    相关资源
    最近更新 更多