2016-07-28 2 views
1

안녕하세요. 모델의 특성을 데이터베이스에 저장하려고 할 때 문제가 있습니다. I는 OctoberCMS에 쓰고 난이 기능을 가지고데이터베이스의 모델 속성을 PHP에서 데이터베이스로 저장합니다.

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 내 if 문 쇼 ($ actualNewsletter)이 status_id = 2 그러나 데이터베이스에 난 여전히 내가 afterSave()에서이 기능을 사용 1.이 그래서 내가 필요 없어요 : 내가 becosue

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

오류가 발생하면 저장에서 저장을 사용합니다. 물론 $ fillable = [ 'status_id'] 표를 채웠습니다. 그리고 지금은 내가 왜 내 if에 갈 때 데이터베이스에 저장하지 모르겠어요. 누군가 내 실수를 본 것일까 요?

+0

필자는 10 월 CMS를 한번도 사용해 본 적이 없지만, 여러분의 모델을'-> save()'시켜야 지속되는 것처럼 보입니다. https://octobercms.com/docs/database/model#basic-updates –

+0

하지만이 기능을 사용하여 afterSave() {거기에 내 함수가} 그래서 함께 사용하려고했습니다 -> save() 문제가 다른 위치에 있어야합니다 – LukeKov

+0

save()를 사용하는 것에 지치지 만 내 게시물에는이 내용을 기록하지만 여전히 데이터베이스에 내 속성을 저장하지 않습니다. – LukeKov

답변

2

일부 사용자 지정 논리를 기반으로 모델을 수정 한 다음 저장하려는 경우 가장 적합한 위치는 모델의 beforeSave() 메서드입니다. 저장된 현재 모델에 액세스하려면 $this을 사용하십시오. 당신은 그런 $this->save() 또는 아무것도 실행하지 않아도

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; 
     } 
    } 
} 

: 다음은이 데이터베이스에 저장되기 전에 모델의 속성을 수정하는 데 사용되는 beforeSave() 방법의 예입니다. beforeSave() 메서드에서 모델의 특성을 수정하기 만하면 원하는 결과를 얻을 수 있습니다.

+0

th beforeSave 사용하려고했지만 전이 예전에 사용하고 그 효과가 없습니다. 두 번째로 finnaly는 beforeSave가 아닌 taskSchedule에서이 함수를 데이터베이스에서 자동으로 작동해야하는 cron을 사용하여 사용하려고합니다. automaticaly 검색 레코드와 상태를 의미하며이 상태의 레코드가없는 경우 if 문에서 기준을 찾아이 레코드의 status_id를 덮어 씁니다. 그리고 지금 나는 이것을 사용한다 -> cron에서 save()하지만 이것은 여전히 ​​나의 데이터를 저장하지 않는다. – LukeKov

관련 문제