如何使用PHP检查数据是否已存在于数据库中?

时间:2015-02-06 16:48:02

标签: php mysql database laravel laravel-4

情况:

  • 我的PHP脚本将会运行一次。
  • 并将数据存储在我的数据库中。
  • 因为1周对我来说已经足够了,所以我只想保留它。
  • 假设今天是星期五或 5 (在我的情况下)。
  • 有没有办法检查数据库中date == 5是否为already exist,并可能用一个覆盖它?

  • 如果今天是星期五/ 5,则date == 5的所有旧数据都应重写并存储新数据。

  • 从字面上看,我只想存储一整周的数据。
  • 明天,下一个将重复相同的逻辑。

以下是我将数据插入数据库的方法:

$data              = new Data;
$data->name        = $name;
$data->description = $description;
$data->dayOfWeek   = $today; // could be 0,1,2,3,4,5,6
$data->save(); 

我不确定,我如何在Laravel中实现这一目标。 任何提示/建议将不胜感激!

4 个答案:

答案 0 :(得分:3)

为什么不在foreach循环之外执行此操作 - 在插入

之前
  

Data :: where(“dayOfWeek”,“=”,$ today) - > delete();

那应该照顾你想要的东西,然后你可以像往常一样继续插入:

$data              = new Data;
$data->name        = $name;
$data->description = $description;
$data->dayOfWeek   = $today; // could be 0,1,2,3,4,5,6
$data->save(); 

答案 1 :(得分:0)

您可以使用INSERT ... ON DUPLICATE KEY UPDATE例如。像那样

INSERT INTO `data` (`name`, `description`, `day`) VALUES (:name, :description, :day)
ON DUPLICATE KEY UPDATE name = VALUES(name), description = VALUES(description)

当然,您必须在day字段上声明唯一键才能使其正常工作。

答案 2 :(得分:0)

首先从数据库中获取数据;

$data = Data::where('dayOfWeek', $today)->first();

然后检查数据是否存在,如果不是创建则更新。

if (!is_null($data)){
    $data->update($new_attribute_data)
}
else {
    Data::create($new_attribute_data);
}

注意:如果将GET或POST数据放入模型中,使用update方法可能需要填充模型中的$ fillable数组。你可以这样做;

class Data extends Eloquent {
    ...
    protected $fillable = ['name','description','dayOfWeek'];
}

Laravel将使用输入中的相应数据填充模型属性。

编辑:

作为上述方法的更快方法,请使用updateOrCreate方法;

Data::updateOrCreate(['dayOfWeek' => $today], $new_attribute_data);

这将搜索具有与第一个参数匹配的属性的数据模型,并将使用第二个参数更新其他属性。 Ref

答案 3 :(得分:0)

如果指定ON DUPLICATE KEY UPDATE,并且插入的行将导致UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行的UPDATE。例如,如果列a声明为UNIQUE并且包含值1,则以下两个语句具有相同的效果:

示例代码:

INSERT INTO table (a,b,c) VALUES (4,5,6)
  ON DUPLICATE KEY UPDATE c=9;