【问题标题】:Override boot function when insert function calling in Laravel在 Laravel 中插入函数调用时覆盖引导函数
【发布时间】:2019-08-10 13:00:48
【问题描述】:

我在 laravel 模型中有覆盖引导功能,代码结构如下:

class modelName extends Model
{
        protected static function boot(){
        parent::boot();
        self::creating(function ($model){
        //Do Some Stuff
        });
}

当我调用创建函数时,这工作正常,如下所示:

modelName::create($tmpArray);

但是当我想使用插入功能时它不起作用:

modelName::insert($tmpArray);

现在我想在调用插入函数时调用引导函数,我有二维数组;在这种情况下,我只需要插入函数来将数据保存在一行中。

【问题讨论】:

    标签: php laravel-5 model insert overriding


    【解决方案1】:

    创造是雄辩模型的事件。

    insert() 不是 eloquent 模型的方法,它是 db 查询的方法。

    尝试使用雄辩的方法而不是db查询。

    see laravel doc for eloquent methods

    see Db queries method

    【讨论】:

    • 我有二维数组;在这种情况下,我只需要插入函数来将数据保存在一行中。
    • 可以使用 eloquent 的 Model::createMany($arrayOfObjects) 方法创建多个相关模型
    【解决方案2】:

    只有在使用 Eloquent 函数保存/更新/删除记录时才会调用事件。

    如果您希望在保存多条记录时触发事件,您可以尝试使用Model::createMany($arrayOfObjects)。然而,检查这个函数的源代码,它实际上会为数组中的每条记录运行一个单独的查询。所以如果你有很多,你可能需要考虑不同的路线。

    【讨论】:

      【解决方案3】:

      对于两个二维数组可以使用createMany或saveMany的雄辩方法

      save 和 create 的区别在于 save 接受一个完整的 Eloquent 模型实例,而 create 接受一个普通的 PHP 数组。 你可以参考 laravel 文档Inserting & Updating Related Models

      【讨论】:

        猜你喜欢
        • 2010-10-25
        • 2010-09-22
        • 2011-09-27
        • 1970-01-01
        • 2021-03-14
        • 1970-01-01
        • 1970-01-01
        • 2015-07-05
        相关资源
        最近更新 更多