gpt4 book ai didi

laravel - 防止 Laravel Eloquent 模型上的某些 CRUD 操作

转载 作者:行者123 更新时间:2023-12-01 22:59:55 25 4
gpt4 key购买 nike

有没有一种简单的方法可以防止在 Eloquent 模型上执行某些 CRUD 操作?

我现在是怎么做的(根据内存,我想我缺少一个与 Eloquent 的 save() 兼容的论点,但这并不重要):

<?php

class Foo extends Eloquent {

public function save()
{
// Prevent Foo from being updated.
if (!empty($this->id)) {
throw new \Exception('Update functionality is not allowed.');
}

parent::save();
}

}

在这种情况下,在任何情况下都不应该允许更新这些模型,并且我希望我的应用程序在尝试更新它们时爆炸。有没有更简洁的方法来做到这一点而不覆盖 Eloquent 的 save()方法?

最佳答案

除了@AlanStorm 的回答,这里还有一个综合信息:

  • 您可以为所有模型设置全局监听器:
    Event::listen('eloquent.saving: *', function ($model) {
    return false;
    });
  • 或者对于给定的模型:
    Event::listen('eloquent.saving: User', function ($user) {
    return false;
    });
    // or
    User::saving(function ($user) {
    return false;
    });

    // If it's not global, but for single model, then I would place it in boot():
    // SomeModel
    public static function boot()
    {
    parent::boot();

    static::saving(function ($someModel) {
    return false;
    });
    }
  • 对于只读模型,您只需要一个 saving事件监听器返回 false,然后全部:Model::create , $model->save() , $model->update()将被拒绝。
  • 这是所有 Eloquent 事件的列表:booting , booted , creating , created , saving , saved , updating , updated , deleting , deleted还有 restoringrestoredSoftDeletingTrait 提供.
  • 关于laravel - 防止 Laravel Eloquent 模型上的某些 CRUD 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28203317/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com