我有一张名为permissions
的表格;这就像用户可以拥有的不同角色。随着项目的增长,我可能会添加更多功能,因此会创建更多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);
}
}
}
}
有更好的做法吗?
答案 0 :(得分:1)
您可以在firstOrCreate($permission)
型号上使用Permission
吗?这会为你消除一些代码。
foreach($permissions as $permission) {
Permission::firstOrCreate($permission);
}
请注意,您需要在模型中设置protected $fillable;
属性,以便对字段进行批量分配。
编辑:您还可以将权限存储在项目的配置文件中,以便更容易访问。看起来像是一个更自然的地方,而不是代码本身内部的静态。
编辑#2:Mass Assignment Link Here
直接来自laravel docs:
fillable属性指定哪些属性应该是可批量分配的。这可以在类或实例级别设置。
class User extends Eloquent {
protected $fillable = array('first_name', 'last_name', 'email');
}
编辑#3:
我还建议不要将fluent与eloquent模型混合使用。您已将Permission
模型添加到播种机中。如果权限表的名称发生更改,您应该使用它,因此您只需要更改模型中的protected $table;
属性。
直接来自Laravel Docs的示例:
// Retrieve the user by the attributes, or create it if it doesn't exist...
$user = User::firstOrCreate(array('name' => 'John'));