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

Mar*_*ark 1 php laravel laravel-5

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

我正在使用此代码尝试更新/创建新记录。假设首先匹配intern_id并匹配create_at列。如果找到,它将创建一个新的。但是,似乎总是在创建一个新值,当它创建一个新值时,company_idand intern_id列设置为0,而不是原始值。

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

Ari*_*que 5

使用此代码

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

我相信这会起作用。

updateOrCreate() Model Abstract Class的函数需要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;
    }
Run Code Online (Sandbox Code Playgroud)