ModelBuilder
提供創見複雜資料的模型生成器。
一個簡單範例:
namespace App\ModelBuilders;
use App\Models\Product;
use A2Workspace\ModelBuilder\ModelBuilder;
class ProductBuilder extends ModelBuilder
{
public function make()
{
$product = new Product;
$product->name = $this->name;
$product->price = $this->price;
// ...
return $product;
}
public function rules()
{
return [
'name' => 'required',
'price' => 'required|int|min:1',
];
}
}
composer require a2workspace/laravel-model-builder
要創見一個新的模型生成器,可以執行 make:builder
artisan 命令:
php artisan make:builder ProductBuilder
在 make()
方法中初始化並定義模型的屬性。
class ProductBuilder extends ModelBuilder
{
public function make(): Product
{
$product = new Product;
$product->name = $this->name;
$product->price = $this->price;
// ...
return $product;
}
}
ModelBuilder
有提供類似於 Model
的修改器方法。詳細參考官方文件 Accessors & Mutators。
class ProductBuilder extends ModelBuilder
{
public function setPriceAttribute($value)
{
if (0 >= $value) {
throw new InvalidArgumentException('價格必須大於 0');
}
$this->attributes['price'] = $value;
}
}
在 create()
時會進行驗證。
class ProductBuilder extends ModelBuilder
{
public function rules(): array
{
return [
// ...
];
}
public function messages(): array
{
return [
// ...
];
}
}