關於 Laravel-admin 後臺管理系統 setTagsAttribute 的正確使用

272361997發表於2020-01-19

laravel-admin 後臺管理系統setTagsAttribute方法的正常使用。
很多朋友在使用存入mysql 資料庫時會提示 [Array to string conversion SQL: insert into]什麼的,資料庫不能存入array陣列格式。
那是因為在存入欄位錢沒有進行資料處理。預設的是陣列格式!需要怎麼處理呢?

    解決問題的思路一直很清晰:根據路由規則找到表單提交的controller,然後將在存入資料庫之前,將陣列拼接成字串。
 Xdebug  是解決該問題必備的工具,稍後我將開設專欄詳細講解Xdebug相關的東西。
**********************等等。

** 以上 多餘的閒話就不多扯了!直接進入重點。
案例: blog 表 中有一個 tags欄位。那麼需要到Blog 模型裡面新增如下方法:

public function setTagsAttribute($value)
{
      $this->attributes['tags'] = implode(',', $value);
}

在models對應模型中新增如上欄位後,就可以直接使用了;
原理如下:

foreach  ($inserts  as  $column  =>  $value)  {  
    $this->model->setAttribute($column,  $value);  
}  
$this->model->save();

這裡呼叫了先呼叫了model的setAttribute方法將資料設定為model的屬性,然後save。那麼我們是否可以針對這個單獨的model來在這裡處理呢?這樣的好處在於不會影響別的model。進入setAttribute方法。

   if  ($this->hasSetMutator($key))  { 
        return  $this->setMutatedAttributeValue($key,  $value);  
    }

這個方法的第一步,就是判斷這個屬性有沒有單獨的設定方法(hasSetMutator),這不正好滿足了我們的需求麼?進入hasSetMutator方法:

 return  method_exists($this,  'set'.Str::studly($key).'Attribute');

發現,這裡使用了一個字串拼接的方式來確定是否要呼叫該屬性的設定方法。也就是說,如果在model中定義了某個屬性的設定方法setXxxAttribute,就會呼叫這個方法來賦這個屬性的值(呼叫setMutatedAttributeValue方法:

   return  $this->{'set'.Str::studly($key).'Attribute'}($value);

到此,已經完全講解完畢,如有不懂可以掃碼加我。

關於laravel-admin 後臺管理系統setTagsAttribute的正確使用

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章