【问题标题】:Update if data exist, otherwise insert new data如果数据存在则更新,否则插入新数据
【发布时间】:2015-12-17 00:09:22
【问题描述】:

我是 Laravel 的新手。我想将数组中的数据插入数据库。我的数据被插入到数据库中,但是当数据库中存在数据时,相同的数据会上传到数据库中。我只想插入不在数据库中的新数据。

$str=$this->entry();
$end=$this->exit_entry();

$st=array_chunk($str,5);
$ex=array_chunk($end,5);
$result=array();
foreach($st as $v1){
    $tmp = array(
        'Employee_id'=>$v1[0],
        'Employee_name'=>$v1[1],
        'Date' => $v1[2],
        'Day' =>$v1[3],
        'Time1' => $v1[4]
    );

    foreach($ex as $v2){
        if($v2[1] == $v1[1] && $v2[0] == $v1[0] && $v2[2] == $v1[2] && $v2[3] == $v1[3]  ){
            $tmp['Time2']=$v2[4];
        }
    }
    $result[] =   $tmp;
}

foreach($result as $res) {
    $res1 = EmployeeList::insert($res);
}

//var_dump($res1);

【问题讨论】:

  • 您的数据库中哪个是唯一字段?
  • 我是说是Employee_ID
  • 我认为 firstorcreate() 函数会帮助你,而不是 insert(),google 一次
  • 每个日期相同的employee_name不会插入两次
  • 好吧,也许我的回答可以帮到你。

标签: php mysql laravel-5.1


【解决方案1】:

有两种方法可以解决这个问题,具体取决于您想要做什么;使用firstOrCreate()firstOrNew()

firstOrCreate() 将检查所有进入它的值,如果它们都与已经存在的记录匹配,那么它将返回一个结果,否则它将使用您传递的参数创建一个新记录。

firstOrCreate 的问题是,如果其中一个参数不匹配,那么它将创建一个新实例。例如,如果你做了两个插入,只是 Employee_name 拼写不同,那么这将创建一个新实例,即使 Employee_id 没有改变。

另一个选项是firstOrNew(),它执行相同的检查,如果没有找到结果,则返回一个模型实例供您使用。但是,您需要通过调用 save() 手动保存。

使用这些:

  • $res1 = EmployeeList::firstOrCreate($res);
  • $res1 = EmployeeList::firstOrNew($res); $res1->save();

如果您可以直接插入而无需处理模型中插入的内容,请使用firstOrCreate(),如果您想更改或选择模型中输入的内容,请使用firstOrNew()

如果您想了解两者之间的更多信息,那么post 总结得很好。

【讨论】:

    【解决方案2】:

    我认为如果数据已经存在,您的问题是更新。所以这就是你可以做的:

    $res1 = EmployeeList::firstOrCreate($res);
    

    但这只有在您的 Employee_id 设置为主键时才有效。

    【讨论】:

    • firstOrCreate() 函数正在工作。首先,我将表单数据插入到数据库中。然后我将此数据库数据插入到问题中给出的新数据库中。每次提交表单时,都会在之前的数据之后将新数据输入到第二个数据库中。如果数据库中有相同的数据,我只想将数组新值更新到数据库中
    • @Alien 也许你的Employee_id 没有设置为索引。请尝试将其设置为索引,您应该有您的意思。
    • 只需运行migrate:rollback,然后重试
    猜你喜欢
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    相关资源
    最近更新 更多