2015-02-06 102 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; 
相關問題