情况:
- 我的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);
这将搜索具有与第一个参数匹配的属性的数据模型,并将使用第二个参数更新其其他属性。参考