Laravel / Lumen 只读模型?

Dee*_*yal 7 php laravel eloquent lumen

我们系统中的一些表是使用第 3 方 API 提供的,我们的系统应该只从中读取数据,而从不插入或更新任何内容。

Laravel/Lumen 中是否有任何功能,我们可以在模型中提及禁止/禁用插入/更新查询,就像我们可以选择 public $timestamps = false; 禁用时间戳?

这些表位于同一个数据库中,否则我们将根据 MySQL 用户进行限制。

Tar*_*dam 9

有几种方法。
选项 1:最快的可能是这种“只读”模型特征。 https://github.com/michaelachrisco/ReadOnlyTraitLaravel

它可以保护您免受...

  • 创造
  • 强制创建
  • 节省
  • 更新
  • 首先或创建
  • 第一个或新的
  • 删除
  • 破坏
  • 恢复
  • 强制删除
  • 在模型上执行删除
  • 完成保存
  • 执行更新
  • 触碰
  • 插入
  • 截短

选项 2:一种完全不同的方法是在数据库配置和模型连接上。所以,这有两个部分。

project/config/database.php 复制并调整数据库连接。

'mysql' => [
            'driver'         => 'mysql',
            'host'           => env('DB_HOST', '127.0.0.1'),
    ...
'readonly' => [
            'driver'         => 'mysql',
            'read' => [
                'host' => env('DB_HOST', '127.0.0.1')
            ],
            'write' => [
                'host' => 'this.will.404'
            ],
    ...
Run Code Online (Sandbox Code Playgroud)

项目/应用程序/MyReadOnlyModel.php

class MyReadOnlyModel extends Model
{
    protected $connection  = 'readonly';
...
}
Run Code Online (Sandbox Code Playgroud)

如果您有时陷入希望模型可写的陷阱......我建议在同一张桌子上放置 2 个模型。

应用程序/正常/MyModel.php

应用程序/只读/MyModel.php