为什么laravel的updateOrCreate创建新记录而不是更新?

时间:2015-06-13 07:40:12

标签: php laravel laravel-5

代码

width: 350, height: 450

我正在使用此代码尝试更新/创建新记录。我们首先要考虑Entry::updateOrCreate([ 'intern_id'=>$intern['id'], 'created_at'=>Carbon::parse($input['date']) ],[ 'company_id'=>$intern['supervisor']['company']['id'], 'content'=>$input['text'] ]); intern_id列。如果找到,则创建一个新的。但是,它似乎总是创建一个新的,当它创建一个新的时,create_atcompany_id列设置为0而不是原始值。

注意:intern_idintern_id不是PK列。 注2:created_at是日期类型,而不是日期时间

2 个答案:

答案 0 :(得分:5)

使用此代码

Entry::updateOrCreate(['intern_id'=>$intern['id']],
    [
        'created_at'=>Carbon::parse($input['date']),
        'company_id'=> $intern['supervisor']['company']['id'],
        'content'=>$input['text']
    ]);

我相信这会奏效。

Model Abstract Class的

updateOrCreate()函数有2个参数,但参数传递是破坏的。

/**
     * Create or update a record matching the attributes, and fill it with values.
     *
     * @param  array  $attributes
     * @param  array  $values
     * @return static
     */
    public static function updateOrCreate(array $attributes, array $values = array())
    {
        $instance = static::firstOrNew($attributes);

        $instance->fill($values)->save();

        return $instance;
    }

答案 1 :(得分:1)

CALENDAR    CLIENTID    TOTAL   CALENDAR    CLIENTID    TOTAL   CALENDAR    CLIENTID    TOTAL
2017-08-01  2090        0   2017-08-02  2090        0   2017-08-03  2090        0

因为第一次搜索第一个参数数组 找到一条带日期的行,找到第二条带其他日期的行     -----------

//如果要从奥克兰飞往圣地亚哥,则将价格设置为$ 99。 //如果不存在匹配的模型,请创建一个。

Entry::updateOrCreate(
    [
        'intern_id' => $intern['id'],
    ],
    [
        'created_at' => Carbon::parse($input['date'])
            'company_id' => $intern['supervisor']['company']['id'],
        'content' => $input['text']
    ]
);