情况:
有没有办法检查数据库中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中实现这一目标。 任何提示/建议将不胜感激!
答案 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;