模型目录调整

不久前,泰勒·奥特威尔(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中包含的内容是这样写的:

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),

];

}

}

2574f6a56c4ef79783276a42036df17d.png

由于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重新编写的工厂包含许多我们认为您会喜欢的功能。要了解有关模型工厂的更多信息,请查阅数据库测试文档。

关注我,每天更新文章。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐