我正在使用Laravel建立一个买卖应用程序.在概论中,有几个表与买卖有关.为了将它们组合在一起,而不是依赖于字母顺序(在PhpMyAdmin、Adminer、TablePlus等中),我想用selling_buying_作为表的前缀.

在我看来,这完全有道理,因为我可以更快地找到座位.对于SPACE的许可权表(model_has_permissions,model_has_roles,role_has_permissions,roles,permissions),我也希望如此,因为它们正在"四处飞",以及作业(job)(jobs,failed_jobs)和用户(users,personal_access_tokens,settings).

新的Pulse套装已经做到了这一点,这是我真正喜欢的.

所以我的问题是:这是一个好主意吗?我将如何实现这一点? 因为我看到的缺点是:使用php artisan make:migration我不会把注意力集中在前缀上.我想要处理模型上的前缀.

推荐答案

为表名添加前缀以更好地组织 struct 是一种合理的方法,而且它确实可以更容易地定位相关表,尤其是在应用程序增长时.Laravel允许您在Eloquent 的模型中自定义表名.

下面是如何在Laravel中实现这一点:

1. Update the Eloquent Model:

在每个Eloquent 的模型中,使用$table属性指定自定义表名:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class BuyingItem extends Model
{
    protected $table = 'buying_items';

    // rest of the model...
}
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class SellingItem extends Model
{
    protected $table = 'selling_items';

    // rest of the model...
}

2. Database Migrations:

使用php artisan make:migration创建迁移时,您可以在生成的迁移文件中手动设置表名:

// Example migration file for buying_items table
public function up()
{
    Schema::create('buying_items', function (Blueprint $table) {
        $table->id();
        // other columns...
        $table->timestamps();
    });
}

3. Spatie Permissions Table:

对于空间权限表,您可以使用spatie配置文件来定义定制表名.发布配置文件:

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"

然后,在config/permission.php中,您可以自定义表名:

// config/permission.php
return [

    // ...

    'table_names' => [
        'roles' => 'your_prefix_roles',
        'permissions' => 'your_prefix_permissions',
        'model_has_permissions' => 'your_prefix_model_has_permissions',
        'model_has_roles' => 'your_prefix_model_has_roles',
        'role_has_permissions' => 'your_prefix_role_has_permissions',
    ],

    // ...

];

4. Jobs and Users:

与其他模型类似,您可以在Eloquent 的模型和迁移文件中为作业(job)和用户设置表名.

5. Considerations:

  • 确保在迁移中更新外键,以反映 新的表名.
  • 记录您的表的命名约定 团队推荐人.

总体而言,使用前缀来更好地组织是一个好主意,而且Laravel的灵活性允许您根据自己的喜好实现它.

Php相关问答推荐

如何发送woocommerce订单跟踪码与短信

SQLSTATE [42S02]:找不到基表或视图:1146 Table eshop. sessions不存在'''

照明\Support\Collection::Filter():参数#1($Callback)的类型必须为?可调用、已给定数组、已调用

WooCommerce/WordPress:简单的产品属性显示

使用WordPress wp_mail()的邮箱标题无效

WooCommerce数量减号和加号图标未显示

在PHP中读取JSON

将部分产品排除在WooCommerce的计算附加费之外

当主页和帖子的缩略图相同时,如何减少主页和帖子的缩略图

如何保存基于用户 Select 的复选框 Select 模式

我的邮箱中的链接在我的URL中添加了一个

如何在微软图形API中使用用户S访问令牌或基于租户ID的访问令牌?

PHP:为什么递归需要这么长时间

execute_query 和prepare+execute 有什么区别?

用户注册表单中的 HTTP 错误 405

wp_insert_post() 和 WordPress 中查询字符串的多个帖子

Filament PHP v3:在禁用的表单字段上,ID 不会写入数据库

在 groupBy laravel 5.7 中 Select 多列

Composer自动加载器重复了子类的类文件路径

docker |管道失败的 ubuntu 源列表