Laravel模型工厂错误:尝试获取非对象的属性

问题描述 投票:1回答:1

我正在尝试使用模型工厂来播种数据库,但是在运行它时出现错误:

Trying to get property 'id' of non-object

这是我的代码:

// TasksTableSeeder.php

factory(pams\Task::class, '2000', rand(1, 30))->create();

// ModelFactory.php

$factory->defineAs(pams\Task::class, '2000', function (Faker\Generator $faker) {
static $task_number = 01;
return [
    'task_number' => $task_number++,
    'ata_code' => '52-00-00',
    'time_estimate' => $faker->randomFloat($nbMaxDecimals = 2, $min = 0.25, $max = 50),
    'work_order_id' => '2000',
    'description' => $faker->text($maxNbChars = 75),
    'action' => '',
    'duplicate' => '0',
    'certified_by' => '1',
    'certified_date' => '2015-11-08',
    'status' => '1',
    'created_by' => '1',
    'modified_by' => '1',
    'created_at' => Carbon\Carbon::now()->format('Y-m-d H:i:s'),
    'updated_at' => Carbon\Carbon::now()->format('Y-m-d H:i:s'),
    ];
});

我已经尝试从模型工厂中删除所有变量并使用常量,但这并不能解决问题。我尝试过从ModelFactory.php中提取数据并将其直接放入TasksTableSeeder.php中,并且确实可以使用,但是我使用的是常量,没有变量。

我无法为自己的生活弄清楚它在说什么'id'。

我正在运行Laravel v5.1

laravel-5.1 faker
1个回答
0
投票

我发现了问题。在一个阶段,我实现了一个BaseModel.php模型,该模型在创建或更新模型时会自动插入当前用户ID。播种器失败,因为没有当前用户,因此我必须添加检查以查看是否有首先登录的用户。

这里是代码:

static::creating(function($model)
    {
        if(Auth::user())
        {
            $model->created_by = Auth::user()->id;
            $model->modified_by = Auth::user()->id;
        }
        else
        {
            $model->created_by = '1';
            $model->modified_by = '1';
        }
    });

    static::updating(function($model)
    {   
        if(Auth::user())
        {
            $model->modified_by = Auth::user()->id;
        }
        else
        {
            $model->modified_by = '1';
        }
    });

这不是很漂亮,但是可以完成工作:)

© www.soinside.com 2019 - 2024. All rights reserved.