【问题标题】:syntax error, unexpected ',', expecting ']'语法错误,意外 ',',期待 ']'
【发布时间】:2019-12-06 02:12:18
【问题描述】:

我正在尝试将所有第一个单词都作为大写字母的数据添加到数据库中。但它显示错误语法错误。

意外的',', 期待']',,,,,,,,,,,,,,,,,,,,

型号

protected $fillable = [
     'category_name',
     'category_description',
     'category_slug',
     'category_image'
];

public function setFirstNameAttribute($value)
{
    $this->attributes[
        'category_name',
        'category_description',
        'category_slug',
        'category_image'
    ] = strtoupper($value);
}

【问题讨论】:

    标签: laravel eloquent laravel-5.8


    【解决方案1】:

    您对setFirstNameAttribute($value) mutator 函数的使用是错误的。 Mustator 仅适用于一个属性。所以你必须为每个属性创建多个 mutator。

    可能的答案。如果你想改变category_name

    public function setCategoryNameAttribute($value)
    {
        $this->category_name = strtoupper($value);
    }
    

    如果你想改变category_description

    public function setCategoryDescriptionAttribute($value)
    {
       $this->category_description = strtoupper($value);
    }
    

    同样,您需要为所有其他属性定义多个修改器。

    编辑

    如果您只想将单词的首字母大写,请使用title_case() 而不是strtoupper()

    public function setCategoryDescriptionAttribute($value)
    {
       $this->category_description = title_case($value);
    }
    

    【讨论】:

    • 在它的右括号 public function setCategoryNameAttribute($value) { $this->category_name = strtoupper($value) }
    • 忽略我的语法错误 :) 从答案中获得灵感 :)
    • 为什么要投反对票?这是最标准的建议,也是最好的答案。
    • 这不是真的。您可以在 mutator 中使用任意数量的属性。我可能不是一个好主意,但有可能。
    【解决方案2】:

    试试看。

    public function setCategoryNameAttribute($value){
        $this->attributes['category_name'] = strtoupper($value);
    }
    

    或者

    public function setCategoryNameAttribute($value)
    {
        return strtoupper($value);
    }
    

    如果您想处理所有字段,那么您可能已经为所有字段定义了函数。

    【讨论】:

    • 我试过上面的那个,它把所有的单词都变成了大写,我只需要每个单词的第一个字母,比如 ucfirst
    • 使用 ucfirst 代替 strtoupper。
    • 类别名称包含两个词 alpha bravo ucfirst 只会让 Alpha bravo 我需要 Aplha Bravo ......如何做到这一点
    • 使用 ucwords 老兄。
    【解决方案3】:
    $this->attributes[
        'category_name',
        'category_description',
        'category_slug',
        'category_image'
    ] = strtoupper($value);
    

    您不能像这样一次设置多个数组值。您必须单独或循环设置它们:

    public function setFirstNameAttribute($value)
    {
        $attribute_names = [
            'category_name',
            'category_description',
            'category_slug',
            'category_image',
        ];
    
        foreach ($attribute_names as $attribute_name) {
            $this->attributes[$attribute_name] = strtoupper($value);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-12
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多