如何使用PHP检查数据是否已经在数据库中?
问题描述:
- 我的PHP脚本将运行一次的方式。
- 并且会将数据存储在我的数据库中。
- 由于1周对我来说已经够用了,所以我只想保留这一点。
- 假设今天是星期五或者(在我的情况下)。
有没有办法检查数据库中的
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。 任何提示/建议将不胜感激!
答
你为什么不这样做你的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();
答
您可以使用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
字段上的唯一键,使其工作。
答
首先从数据库中获取数据;
$data = Data::where('dayOfWeek', $today)->first();
然后检查数据是否存在,如果它是更新,如果不创建。
if (!is_null($data)){
$data->update($new_attribute_data)
}
else {
Data::create($new_attribute_data);
}
作为一个说明:使用更新方法可能需要你填写你的模型中的$可填写的数组,如果你把GET或POST数据到它。你可以这样做;
class Data extends Eloquent {
...
protected $fillable = ['name','description','dayOfWeek'];
}
而且Laravel将填充模型属性和输入中的相应数据。
编辑:
作为上述方法的更快捷的方式,使用方法updateOrCreate
;
Data::updateOrCreate(['dayOfWeek' => $today], $new_attribute_data);
这将搜索数据模型相匹配的第一个参数属性,将与第二个参数更新它的其他属性。Ref
答
如果指定ON DUPLICATE KEY UPDATE,并且插入的行会导致UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行的UPDATE。例如,如果列被声明为UNIQUE,并且包含值1,以下两个语句具有相同的效果:
示例代码:
INSERT INTO table (a,b,c) VALUES (4,5,6)
ON DUPLICATE KEY UPDATE c=9;
谢谢,这将至少让我在正确的方向思考。你知道如何在Laravel做到这一点?我通常 - 只要做'$ data-> save();'Laravel会为我保存它。 – iori 2015-02-06 17:04:46