gpt4 book ai didi

php - Eloquent Seeder - 仅在数据不存在时添加

转载 作者:搜寻专家 更新时间:2023-10-31 21:32:50 26 4
gpt4 key购买 nike

我有一个名为permissions 的表;这就像用户可以拥有的不同角色。随着项目的增长,我可能会添加更多的功能,因此会创建更多的权限

我有一个 PermissionSeeder.php,我想继续添加我添加的权限。然后每次添加新权限时,我都想在其上运行播种机。但是,不应创建现有条目。

我正在考虑在每次更新时截断表,但是其他数据透视表上的 permission_id 会发生冲突,因为它们是外键。

这就是我此刻要做的:

use Permission;
class PermissionSeeder extends Seeder {

public function run()
{
$permissions = [...]; // this is the array of ALL permissions that will keep on growing

foreach ($permissions as $permission) {
$model = Permission::whereName($permission['name']);
if ($model->count() <= 0) {
DB::table('permissions')->insert($permission);
}
}
}
}

有更好的做法吗?

最佳答案

您可以在您的 Permission 模型上使用 firstOrCreate($permission) 吗?这将为您消除一些代码。

foreach($permissions as $permission) {

Permission::firstOrCreate($permission);

}

请记住,您需要在模型中设置 protected $fillable; 属性,以允许批量分配您的字段。

编辑:您还可以将您的权限存储在项目的配置文件中,以便于访问。似乎更自然地放置它而不是静态代码本身。

编辑#2:Mass Assignment Link Here

直接来自 laravel 文档:

fillable 属性指定哪些属性应该是可批量分配的。这可以在类或实例级别设置。

class User extends Eloquent {

protected $fillable = array('first_name', 'last_name', 'email');

}

编辑#3:

我还建议不要混合 fluenteloquent楷模。您已经将 Permission 模型包含到您的播种器中。如果您的权限表的名称发生变化,您应该使用它,因此您只需要更改模型中的 protected $table; 属性。


直接来自 Laravel 文档的示例:

// Retrieve the user by the attributes, or create it if it doesn't exist...
$user = User::firstOrCreate(array('name' => 'John'));

Laravel Docs

关于php - Eloquent Seeder - 仅在数据不存在时添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26918276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com