Php 为什么拉威尔';s UPDATEOR是否创建新记录而不是更新?

Php 为什么拉威尔';s UPDATEOR是否创建新记录而不是更新?,php,laravel,laravel-5,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'] ]); 我正在使用此代码尝试更新/创建新记录。假设它首先在列中匹配i

代码

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

注意:
intern\u id
或在
创建的
不是主键列。
注2:
创建的是日期类型,而不是日期时间

使用此代码

Entry::updateOrCreate(['intern_id'=>$intern['id']],
    [
        'created_at'=>Carbon::parse($input['date']),
        'company_id'=> $intern['supervisor']['company']['id'],
        'content'=>$input['text']
    ]);
我相信这会奏效

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;
    }
因为第一个参数数组是第一次搜索的 发现一行有日期,第二行发现其他日期不同 -----------

//如果有从奥克兰到圣地亚哥的航班,价格定为99美元。 //如果不存在匹配的模型,请创建一个

$flight = App\Flight::updateOrCreate(
    ['departure' => 'Oakland', 'destination' => 'San Diego'],
    ['price' => 99]
);
$flight = App\Flight::updateOrCreate(
    ['departure' => 'Oakland', 'destination' => 'San Diego'],
    ['price' => 99]
);