2015-02-06 59 views
0

现状:如何使用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。 任何提示/建议将不胜感激!

回答

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(); 
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字段上的唯一键,使其工作。

+0

谢谢,这将至少让我在正确的方向思考。你知道如何在Laravel做到这一点?我通常 - 只要做'$ data-> save();'Laravel会为我保存它。 – iori 2015-02-06 17:04:46

0

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

$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

0

如果指定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; 
相关问题