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 [
// ...
];
}
}