原文連接:https://www.wjcms.net/archives/laravel8更新之模型目錄及模型工廠類調整
模型目錄調整
不久前,泰勒·奧特威爾(Taylor Otwell)在Twitter上進行了一項民意調查,詢問社區是否將所有模型都放在一個app/Models檔案夾中或使用默認app/目錄,并且大多數人表示他們將其模型放入app/Models,
由于該調查,app/Models默認情況下該檔案夾現在將包含在Laravel 8中,
如果使用php artisan make:model User命令創建新模型,它將把新模型放在app/Models目錄中,
注意:關于這一點的一個值得注意的事情是,如果您不喜歡該Models目錄,只要洗掉該app/Models目錄,該artisan命令將app/直接在目錄中添加新模型,就像以前在所有Laravel版本中一樣,
模型工廠類的調整
Eloquent的模型工廠已完全改寫為基于類的工廠,并經過改進以提供一流的關系支持,例如,UserFactory,在Laravel中包含的內容是這樣寫的:
<?php
namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
class UserFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = User::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'name' => $this->faker->name,
'email' => $this->faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),
];
}
}

由于HasFactory生成的模型具有新特性,因此可以直接在控制器中使用模型工廠,只需要use一下模型:
use App\Models\User;
User::factory()->count(50)->create();
由于模型工廠現在是簡單的PHP類,因此狀態轉換可以寫為類方法,另外,您可以根據需要將其他任何幫助程式類添加到Eloquent模型工廠中,
例如,您的User模型可能具有suspended修改其默認屬性值之一的狀態,您可以使用基本工廠的state方法定義狀態轉換,您可以根據自己的喜好命名狀態方法,畢竟,這只是一個典型的PHP方法:
/**
* Indicate that the user is suspended.
*
* @return \Illuminate\Database\Eloquent\Factories\Factory
*/
public function suspended()
{
return $this->state([
'account_status' => 'suspended',
]);
}
定義狀態轉換方法后,我們可以像這樣使用它:
use App\Models\User;
User::factory()->count(5)->suspended()->create();
如前所述,Laravel 8的模型工廠包含對關系的一流支持,因此,假設我們的User模型有一個posts關聯方法,我們可以簡單地運行以下代碼來生成一個包含三個帖子的用戶:
$users = User::factory()
->hasPosts(3, [
'published' => false,
])
->create();
為了簡化升級程序,已發布了laravel/legacy-factories軟體包,以支持Laravel 8.x中模型工廠的先前迭代,
Laravel重新撰寫的工廠包含許多我們認為您會喜歡的功能,要了解有關模型工廠的更多資訊,請查閱資料庫測驗檔案,
關注我,每天更新文章,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/170564.html
標籤:PHP
下一篇:面對編程程序的程式

