2016-07-28 55 views
1

嗨我有問題,當我試圖將模型的屬性保存到數據庫。我寫在OctoberCMS和我有這樣的功能:保存在PHP數據庫模型的屬性在OctoberCMS

public function findActualNewsletter() 
    { 
     $actualNewsletter = Newsletter::where('status_id', '=', NewsletterStatus::getSentNowStatus())->first(); 
     if (!$actualNewsletter) { 
      $actualNewsletter = Newsletter::where('send_at', '<=', date('Y-m-d'))->where('status_id', NewsletterStatus::getUnsentStatus())->first(); 

      $actualNewsletter->status_id = NewsletterStatus::getSentNowStatus(); 
      dd($actualNewsletter); 
     } 
     return $actualNewsletter; 
    } 

getSentNowStatus()= 2;

getUnsentStatus()= 1;

DD($ actualNewsletter)在我的if語句表明STATUS_ID = 2,但在數據庫中,我仍然有1。我在afterSave()使用此功能,所以我不需要:

$actualNewsletter->status_id = NewsletterStatus::getSentNowStatus(); 
    $actualNewsletter->save(); 

becosue我有錯誤,然後我使用保存保存。 當然我填表$ fillable = ['status_id']。現在我不知道爲什麼它不保存在數據庫中,當它去我的if。也許有人看到我的錯誤?

+0

我從來沒有使用過OctoberCMS,但它看起來像你應該' - >保存()'你的模型,所以它仍然存在。 https://octobercms.com/docs/database/model#basic-updates –

+0

但我用這個函數afterSave(){有我的功能}所以我試着用 - > save()問題必須在其他地方 – LukeKov

+0

我累了使用save()我寫了這篇文章,但它仍然不能將我的屬性保存到數據庫中 – LukeKov

回答

2

如果您試圖根據某些自定義邏輯修改模型,然後保存該模型,最好放置模型的beforeSave()方法。要訪問正在保存的當前模型,請使用$this。下面是在使用前會保存到數據庫中修改模型的屬性beforeSave()方法的一個例子:

public function beforeSave() { 
    $user = BackendAuth::getUser(); 
    $this->backend_user_id = $user->id; 

    // Handle archiving 
    if ($this->is_archived && !$this->archived_at) { 
     $this->archived_at = Carbon\Carbon::now()->toDateTimeString(); 
    } 

    // Handle publishing 
    if ($this->is_published && !$this->published_at) { 
     $this->published_at = Carbon\Carbon::now()->toDateTimeString(); 
    } 

    // Handle unarchiving 
    if ($this->archived_at && !$this->is_archived) { 
     $this->archived_at = null; 
    } 

    // Handle unpublishing, only allowed when no responses have been recorded against the form 
    if ($this->published_at && !$this->is_published) { 
     if (is_null($this->responses) || $this->responses->isEmpty()) { 
      $this->published_at = null; 
     } 
    } 
} 

你不必跑$this->save()或類似的東西。只需在beforeSave()方法中修改模型的屬性即可實現您的願望。

+0

但我用beforeSave然後它沒有任何效果。其次我finnaly要使用此功能不beforeSave,但在taskSchedule與使用cron它應該自動在我的數據庫上工作。我的意思是automaticaly搜索記錄的狀態,如果沒有這個狀態的記錄,然後在我的if語句中找到標準,然後覆蓋此記錄的status_id。現在我用這個 - > save()在cron中,但是這仍然不能保存我的數據 – LukeKov

相關問題