首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel / Default (不可删除)行中一个模型的两个表

Laravel / Default (不可删除)行中一个模型的两个表
EN

Stack Overflow用户
提问于 2021-07-16 10:45:21
回答 1查看 71关注 0票数 0

我的Laravel 8项目有两个数据库:DB_COMMONDB_SYSTEM。关键是,我希望分离敏感数据以避免删除,因此我将使用一个db_user (具有所有特权)用于DB_COMMON,而另一个则用于DB_SYSTEM.It (不删除或更新权限),这类似于附加的安全层。

还有表/(-s),表示exapmle,rbac_role。我希望将两个角色作为“系统”(S_ADMIN和CUSTOMER)存储在DB_SYSTEM中,并允许用户在相同的表名S_ADMIN中创建新角色,但在DB_COMMON中创建新角色。通常我想在一个地方(一种模式)处理这个角色。

有什么办法吗?

或者,也许,我可以在模特中“推动”这两个角色?我的意思是将数据库表中的行与模型中(甚至是硬编码的)行合并?

EN

回答 1

Stack Overflow用户

发布于 2021-07-16 11:03:19

首先,您必须在config/database.php文件中创建两个单独的连接。mysql连接是默认的,如果您使用的是mysql数据库。

复制该参数并创建新连接:

代码语言:javascript
运行
复制
'connection2' => [
  'driver' => 'mysql',
  'url' => env('DATABASE_URL'),
  'host' => env('DB_HOST', '127.0.0.1'),
  'port' => env('DB_PORT', '3306'),
  'database' => env('DB_DATABASE', 'forge'),
  'username' => env('DB_USERNAME', 'forge'),
  'password' => env('DB_PASSWORD', ''),
  ...
],

然后可以指定在特定连接上运行的任何模型:

代码语言:javascript
运行
复制
class RoleModel extends Model {
  protected $connection = 'connection2';
  ...
}

当您调用RoleModel时,它将连接到第二个数据库。

我没有完全得到您想要的,但是如果您想从两个数据库中的行中选择,您可以动态地设置connection并从任何表中选择行。

代码语言:javascript
运行
复制
$first_rows = RoleModel::setConnection('mysql')->select('id', 'role')->get();
$second_rows = RoleModel::setConnection('connection2')->select('id', 'role')->get();
$combined_rows = $first_rows->merge($second_rows);

如果要在第二个连接中创建新行,则取决于第一个连接中是否存在相同的记录:

代码语言:javascript
运行
复制
if(RoleModel::setConnection('mysql')->where('role', 'somerole')->exists()){
  RoleModel::setConnection('connection2')->create([
    'role' => 'somerole'
  ]);
}

希望这个答案对你有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68407712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档