【发布时间】:2020-06-02 04:15:19
【问题描述】:
我目前正在做一个项目,如果某个日期是过去的。用户应该会收到一封电子邮件,通知他们当前的“合同”已完成。现在我已经构建了功能,如果日期是过去,用户会收到电子邮件,但问题是每次用户重新加载页面时它会再次发送电子邮件。现在我在我的表中添加了一个名为 email_send 的列,默认值为 0,但是当函数发送电子邮件时,它似乎没有从 0 更新到 1?
这是我的 sslController.php:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class sslController extends Controller
{
function SSL(){
$data = DB::table('SSL')->where('userID', Auth::id())
->join('users', 'users.id', '=', 'SSL.userID')->get();
return view('SSL',['data'=>$data]);
}
}
注意join是为了让登录的用户在表中只能看到自己的数据
这是 sslModel.php:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class sslModel extends Model
{
protected $table='SSL';
protected $fillable = [
'email_send',
];
}
这是我的 ssl.blade.php 的一部分:
</tr>
@foreach ($data as $i )
<tr>
<td>
{{$i->AanvraagID}}
</td>
<td>
{{$i->Status}}
</td>
<td>
{{$i->StartDatum}}
</td>
<td>
{{$i->EindDatum}}
</td>
<td>
{{$i->Leverancier}}
</td>
<td>
{{$i->Product}}
</td>
<td>
{{$i->Validatie}}
</td>
<td>
{{$i->TypeCertificaat}}
</td>
<td class="wrong">
@php
$date = new DateTime($i->EindDatum);
$now = new DateTime();
if($date < $now) echo 'Certificaat verlopen';
if ($date < $now && $i->email_send == 0) {
$user = App\User::find(1)->first();
$user->notify(new App\Notifications\TaksComplete);
$user->update(['email_send' => 1]);
}
@endphp
</td>
</tr>
我也试过这个:
if ($date < $now && $i->email_send == 0) {
$user=App\User::find(1);
$user->notify(new App\Notifications\TaksComplete); $SSL=App\sslModel::find(1);
$SSL->email_send=1;
$SSL->update();
}
【问题讨论】:
-
我认为您最好在控制器中执行逻辑并将结果返回给视图。
-
知道如何在我的控制器中实现这个逻辑吗?
-
应该在视图显示的时候触发更新?
-
是的.. 除非日期还没有过去。
-
所以你可以将你的逻辑从视图移动到你的
sslController
标签: php database laravel model controller