Как запретить вставки, обновления и удаления модели в Eloquent ORM - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть такая модель:

class Foo extends Model
{
    protected $table = 'legacy_foo_table';
    protected $primaryKey = 'cod_foo';
}

В моем случае использования я не должен ни удалять, ни вставлять, ни обновлять данные в базе данных.Я хотел бы, чтобы моя Модель заблокировала эти операции в приложении.Я не могу изменить таблицу только для чтения, создать представление или изменить соединение с базой данных, чтобы сделать его доступным только для чтения.

Итак, как запретить изменения в базе данных, в моем программном обеспечении, без изменениябазу данных, сохраняя при этом запросы Eloquent и объектно-реляционное отображение?Еще лучше, если при попытке изменения выдается исключение.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

вы можете создать такую ​​черту, как это пример

class User extends Model {
  use ReadOnlyTrait;
}
0 голосов
/ 25 февраля 2019

Вы сказали, что не можете ничего изменить в самой таблице, но можете ли вы создать нового пользователя, который имеет доступ только для чтения к этой таблице?Если возможно, это будет лучший маршрут.В противном случае вы можете обновить модель, чтобы ограничить эти методы.

Вы можете переопределить методы сохранения и удаления обновления, чтобы вызвать исключение.В вашей модели добавьте:

public function update(array $attributes = [], array $options = [])
{
    throw new \Exception('Updates are not allowed');
}

public function save(array $options = [])
{
    throw new \Exception('Updates are not allowed');
}

public function delete()
{
    throw new \Exception('Deleting is not allowed');
}

Это остановит вас от использования этих методов на экземпляре модели, поэтому выполнение подобных действий приведет к исключению.

$model->update(['attribute' => 'new value']);
$model->delete();

$model->attribute = 'new value';
$model->save();

Это не помешает вам обновить таблицу с помощью построителя запросов. Таким образом, вы все равно можете сделать это:

Foo::where('condition', '=', 'test')->update(['attribute' => 'new value']);

Блокировка для этого потребует от вас создания настраиваемого построителя запросов, который займет много времени.больше усилий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...