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]
);