# 使用中繼模型繼承(extends)Eloquent 模型造成無法使用大量資料新增(Mess Assignment)
大部份的情況可能專案較小,所以我們會直接使用模型(Model)去新增資料,但若專案較大時,且不同的模型之間有共用的方法的話,我會會希望這些模型繼承同一個 Eloquent 模型的中繼類別物件,就像這樣:
**_Eloquent 模型的中繼類別物件_**
~~~
class CustomBaseModel extends Model
{
public $someVariable = null;
public function doSomething()
{
}
}
~~~
**_使用者模型繼承「Eloquent 模型的中繼類別物件」_**
~~~
class User extends CustomBaseModel {
protected $fillable = ['first_name', 'last_name', 'email'];
}
~~~
使用這樣的中繼類別時,如果我們只有`設定變數`或`實作中繼模型類別方法`時,我們可以運作的很正常,但是如果我們需要實作中繼類別的`建構子__construct()`時,我們必須要時做原本 Eloquent Model 類別的建構子,否鑿會無法正常的運作原有的 Eloquent 模型
在 `vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php` Eloquent 模型的檔案中,我們可以看到`建構子__construct()`有需要傳入資料表欄位的屬性值 `$attributes`。
~~~
// vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php
abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializable, QueueableEntity, UrlRoutable {
public function __construct(array $attributes = array())
{
$this->bootIfNotBooted();
$this->syncOriginal();
$this->fill($attributes);
}
}
~~~
這個部分是用來做大量資料新增或異動時(Mass Assignment)需要用到的資料,所以如果我們在中繼類別沒有實作這個`建構子__construct()`,會讓我們的完整 Eloquent Model 出現問題
所以在 Eloquent 中繼類別中我們必須要時作的`建構子__construct()`會長的像這樣:
~~~
class CustomBaseModel extends Model
{
public $someVariable = null;
function __construct(array $attributes = array())
{
parent::__construct($attributes);
// 做中繼類別建構子想要做的事
$this->someVariable = '5566';
}
}
~~~
我們的中繼類別,需要傳入資料表欄位的屬性值 `$attributes`,並執行母類別 Eloquent Model 的建構子,這樣我們的 Eloquent 模型就能夠正常運作了!
- 介紹
- 環境
- .env 檔案
- 資料庫
- Migration (遷移)
- Eloquent Model (模型)
- 設定
- 關聯
- 魔術函式
- 使用 Eloquent
- 常見問題
- 無法取得查詢 Log
- 使用大量資料的方式新增時無法新增
- 使用中繼模型繼承 Eloquent 模型造成無法使用大量資料新增
- PostgreSQL
- 安裝 PostgreSQL ODBC driver
- HTTP
- 請求
- 中介層 (Middleware)
- 視圖 (View)
- 服務
- 認證登入(Auth)
- 郵件(Mail)
- 使用 Gmail 寄信
- 使用 Mailgun 寄信
- 隊列(Queue)
- database
- 非同步(async)
- 輔助方法 (Helpers)
- 自定義輔助方法
- 單元測試 (Unit Test)
- Post CSRF 錯誤
- 錯誤與日誌
- 在單元測試顯示例外
- 日誌記錄層級
- 日誌巨集
- 加密
- 雜湊
- Elixir
- 使用 Elixir 合併 CSS 與 JS
- 設計模式
- 服務容器
- PSR
- Model 模型
- 學習資源
- 套件
- Debug
- Artisan tail
- 工具
- Carbon
- 設計模式
- 其他常見問題
- Call to undefined method getCachedCompilePath()
- 變更專案目錄名稱導致 View 無法讀取
- Laravel 5.1 目錄結構異動
- 學習資源
- 官方
- 社群
- 會議議程
- 工作
- 文件
- 文章
- 套件
- 服務工具
- 教學影片
- 教學網站
- 編輯開發
- 主機
- 成功案例