如何使用PHP检查数据是否已经在数据库中


How to check if data is already in database using PHP?

情况:

  • 我的PHP脚本将以一种方式运行一次
  • 这将把数据存储在我的数据库中
  • 因为一周对我来说已经足够了,所以我只想保持这一点
  • 假设今天是星期五还是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(); 

我不确定,我该如何在拉拉威尔做到这一点。任何提示/建议都将不胜感激!

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

数据::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(); 

你可以像一样使用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字段上声明唯一密钥才能使其工作。

如果指定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;

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

$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将在Input中用相应的数据填充Model Attribute。

编辑:

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

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

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