我的Laravel 8项目有两个数据库:DB_COMMON和DB_SYSTEM。关键是,我希望分离敏感数据以避免删除,因此我将使用一个db_user (具有所有特权)用于DB_COMMON,而另一个则用于DB_SYSTEM.It (不删除或更新权限),这类似于附加的安全层。
还有表/(-s),表示exapmle,rbac_role。我希望将两个角色作为“系统”(S_ADMIN和CUSTOMER)存储在DB_SYSTEM中,并允许用户在相同的表名S_ADMIN中创建新角色,但在DB_COMMON中创建新角色。通常我想在一个地方(一种模式)处理这个角色。
有什么办法吗?
或者,也许,我可以在模特中“推动”这两个角色?我的意思是将数据库表中的行与模型中(甚至是硬编码的)行合并?
发布于 2021-07-16 11:03:19
首先,您必须在config/database.php
文件中创建两个单独的连接。mysql
连接是默认的,如果您使用的是mysql数据库。
复制该参数并创建新连接:
'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', ''),
...
],
然后可以指定在特定连接上运行的任何模型:
class RoleModel extends Model {
protected $connection = 'connection2';
...
}
当您调用RoleModel
时,它将连接到第二个数据库。
我没有完全得到您想要的,但是如果您想从两个数据库中的行中选择,您可以动态地设置connection
并从任何表中选择行。
$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);
如果要在第二个连接中创建新行,则取决于第一个连接中是否存在相同的记录:
if(RoleModel::setConnection('mysql')->where('role', 'somerole')->exists()){
RoleModel::setConnection('connection2')->create([
'role' => 'somerole'
]);
}
希望这个答案对你有帮助。
https://stackoverflow.com/questions/68407712
复制相似问题