私は、保存された検索用語に従ってユーザーに電子メールを送信するコマンドを持っています。今のところ私はこのている:電子メールを送信した後にテーブル行を更新する(Laravelコマンド)
public function handle()
{
$user = Alert::select('search', 'email', 'interval', 'emailSentAt')->join('users', 'alerts.uid', '=', 'users.id')->whereNotNull('search')->distinct()->get();
foreach ($user as $u) {
$cl = new SphinxSearch();
$results = $cl->search('@*' . $u->search, 'spots');
$results = $cl->limit(10);
$results = $cl->setMatchMode(\Sphinx\SphinxClient::SPH_MATCH_EXTENDED);
$results = $cl->setSortMode(\Sphinx\SphinxClient::SPH_SORT_ATTR_DESC, "start");
$results = $cl->get();
Mail::send('emails.newSearchAlert', ['u' => $u, 'results' => $results], function ($m) use ($u) {
$m->from('[email protected]', 'My company');
$m->to($u->email)->subject('Your search alert - ' . $u->search);
});
$u->emailSentAt = Carbon::now();
$u->save();
}
}
ここで私は、ユーザごとに送信した日付と時間を節約することができますどのように二つの質問...
- がありますか?私はそれがコードに示されているようにそれをしようとしています。
$u->emailSentAt = Carbon::now();
と$u->save();
ですが、何も更新しません...emailSentAt
はNULLのままです。 - 私のデータベースには
interval
という列があります($user
で選択されています)。間隔の値は、1または2、毎日または毎週アラートです(それぞれ)。どのように私はそれがユーザーの間隔の好みに応じて実行するようにコマンドを作ることができますか?それが毎日の場合、私は電子メールが毎日送信されるようにしたい...
'$ u'はUserオブジェクトではありません。 foreachループ内でユーザーオブジェクトを読み込んで修正してみてください。 – aynber
あなたは何を言っているのか分かりません...それはユーザーとは関係ありません。アラートタイプのオブジェクトです。 :/ ...更新が必要な列はアラートテーブルにあります。 – harunB10
試した '$ u-> update(['emailSentAt' => Carbon \ Carbon :: now()]);'? – linktoahref