2017-01-16 5 views
1

私は2つのテーブル(通知とalertFrequency)をそれぞれmodelsとしています。 1対多の関係があります。できます。私はそれを自動的に更新しようとすると、ここで私は問題を取得します。短い私のモデル通知は:自動的に1対多の関係を更新する

class Notification extends Model 
{ 
    public function alertFrequencies() 
    { 
     return $this->hasMany('App\AlertFrequency'); 
    } 

    public function alert() 
    { 
     $alert_frequency = AlertFrequency::with('notification') 
      ->orderBy('created_at', 'desc')->select('created_at')->first(); 
     if ($alert_frequency == null) { 
      return false; 
     } 
     return $alert_frequency->created_at->toDateTimeString(); 
    } 
} 

タイムスタンプを返します。がつがつ食うコントローラで達成しようと何I'am

notification_idalertFrequencyテーブル内のフィールド)でcreated_atalertFrequencyテーブル内のフィールド)を更新することです。機能更新まで

public function status() 
{ 
    $notifications = Notification::where('active', 1)->get(); 
    $status = Status::where('name', 'health')->first(); 
    foreach ($notifications as $notification) { 
     $this->updateStatus($notification, $status); 
    } 
} 

private function updateStatus(Notification $notification, Status $status, AlertFrequency $alert) 
{ 
    $status_health = $notification->status('health'); 
    $check = empty($status_health['timestamp']); 
    $elapsed_time = $check ? 10000 : \Carbon\Carbon::parse($status_health['timestamp'])->diffInMinutes(); 
    $check_frequency = $this->getCheckFrequency($notification); 
    if ($check || $elapsed_time >= $check_frequency) { 
     $resCode = $this->getStatusCode($notification->website_url); 
     $this->addStatusToNotification($notification, $status, $resCode); 
     $this->sendNotification(
      $notification, 
      $status_health, 
      $this->getAlertFrequency($alert), 
      $resCode 
     ); 
     /*working right for alert*/ 
     var_dump($this->getAlertFrequency); 
    } 
} 

private function getAlertFrequency(AlertFrequency $notification) 
{ 
    if ($notification->alert() == null) { 
     return false; 
    } 
    return $notification->alert(); 
} 

を次のようにコードがあり、私は値をvar_dump()することができていますし、正常に動作しています。私はそれを自動的にalerFrequencyテーブルを更新するようにstatus関数で呼び出す方法を知らないのですか?あなたの助けに感謝します!

+0

それは、多くの関係に属し::::パブリック関数の通知(){ \tリターンます$ this-> belongsToの(「アプリケーション\通知」を持つ単純なモデルである 'alerFrequency'テーブル – Gayan

+0

の構造がどのようなものです); } –

答えて

1

私が正しく理解している場合はからupdateStatus()メソッドに電話してください。 updateStatus() expectインスタンスAlertFrequencyを引数として実行することはできません。これが問題です。

もしそうなら、このようにupdateStatus()メソッドを少し変更して、AlertFrequencyを引数として渡す必要はありません。 メソッドをupdateStatus()メソッド内で解決することができます。

私はいくつかの変更を加えました。

private function updateStatus(Notification $notification, Status $status) 
{ 
    $alert = app(AlertFrequency::class); 
    // Rest of your code here 

    if ($check || $elapsed_time >= $check_frequency) { 
     return $this->getAlertFrequency(); 
    } 
    return null; 
} 

public function status() 
{ 
    $notifications = Notification::where('active', 1)->get(); 
    $status = Status::where('name', 'health')->first(); 
    foreach ($notifications as $notification) { 
     $frequency = $this->updateStatus($notification, $status); 
     if (!empty($frequency)) { 
      $notification->alertFrequencies()->create([ 
       'notification_id' => $frequency 
      ]); 
     } 
    } 
} 

作成方法を使用する前に、attribute mass assignment上のドキュメントを確認してください。

+0

u rですが、私の質問がはっきりしている場合、状況は次のようになります。status関数は、データベースの通知、ステータス、およびalerFrequncyテーブルを更新します。通知とalertFrequencyには1対多の関係があります。私はとにかくalerfrequencyテーブルを得ることができるはずです。 –

+0

ur答えは私にalerFrequencyを変更してクラスを追加する理由の別の洞察力を与えました! tnx –