php - Laravel 迁移期间的段错误

标签 php laravel segmentation-fault

问题

enter image description here

根据我之前的问题 here ,有人向我指出我不应该尝试在 Laravel 工厂中填充相关模型(即我应该在他们自己的工厂中填充它们)。

但是,我有一个观察者在创建过程中查找相关数据并尝试填充相关模型(这样我就可以仅使用 create:: 方法和一个单步多步形式)。现在,我需要添加一个检查以查看此数据是否已填充到观察器中,因此我不必在工厂中指定它。

在这样做的过程中,我现在在尝试为我的数据库设置种子时遇到段错误。我已经将原因缩小到这一行 - 没有 isset 检查,它工作正常(除了 $data['day'] 没有指定,因此检查);

Segmentation fault (core dumped)

if(isset($data['day'])) $event->day->fill($data['day']);

相关代码

事件工厂.php

$factory->define(App\Event::class, function (Faker $faker) {
    return [
        "name"                        => "A Test Event",
        "description"                 => $faker->paragraphs(3, true),
        "event_start_date"            => today(),
        "event_opening_date"          => today(),
        "event_closing_date"          => tomorrow(),
        "user_id"                     => 1,
        "banner_id"                   => 1,
        "gallery_id"                  => 1,
        "related_event_id"            => 1,
        "status"                      => "published",
        "purchase_limit"              => 1000,
        "limit_remaining"             => 1000,
        "delivery_method"             => "collection",
        "merchandise_delivery_method" => "collection"
    ];
});

EventObserver.php

public function created($event){
        # get all attributes
        $data = $event->getAttributes();

        # fill any related models
        if(isset($data['day'])) $event->day->fill($data['day']);

        # save user
        $event->push();
    }

public function updating($model){
        # get all attributes
        $data = $model->getAttributes();

        # fill any related models
        if(isset($data['day'])) $model->day->fill($data['day']);

        # save user
        $model->push();
    }

其他信息

Command: sudo php artisan migrate:reset --seed

Host: Windows 10

VM Environment: Vagrant running Ubuntu 16.04 via HyperV, mounted share with Samba

PHP Version: 7.1.20

Laravel Version: 5.7

更新

原来问题实际上出在这一行上;

$event->push();

这里会不会发生递归的事情?

更新2

在 Namoshek 的帮助下,我现在可以将其缩小为 xdebug 中的以下错误;

Maximum function nesting level of '256' reached, aborting!

将 xdebug.max_nesting_level 增加到 200000 会恢复段错误。

在我看来,这似乎陷入了无限循环。但是,我看不出在 created 中调用 save()push() 最终会回调到自身。困惑。

最佳答案

这确实是一个无限递归问题。删除行:

$event->push(); // this line appears to call update again, which in turn calls push, which calls update etc...

问题解决了。

关于php - Laravel 迁移期间的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53119568/

相关文章:

MySQL Workbench 未通过 SSH 连接

php - 将参数传递给路由: Missing required parameters for [Route: post] error

c - 尝试运行时 C 中的段错误

c++ - MinGW 编译的程序在 64 位 Windows 上崩溃

PHP - 按键值对多维数组进行分组

php - 用于存储数据的 rawurlencode

php - Laravel 框架对于中型项目是否足够稳定,还是我应该坚持使用更稳定的 Yii?

javascript - PHP mySQL textarea --- 整个shebang

php - 通过 laravel 中的子查询分页

c - 如何调试被覆盖的指针?