Laraval, как обновить столбец в базе данных с помощью функции в представлении - PullRequest
0 голосов
/ 18 февраля 2020

В настоящее время я работаю над проектом, где, если дата в прошлом. Пользователь должен получить электронное письмо с уведомлением о том, что текущий «Контракт» завершен. Сейчас я уже построил функцию, где, если дата в прошлом, пользователи получают электронное письмо, но проблема в том, что каждый раз, когда пользователь перезагружает страницу, он снова отправляет электронное письмо. Теперь я добавил в свою таблицу столбец с именем 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]);
    }
}

Обратите внимание, что объединение выполняется так, что вошедший в систему пользователь видит только свои данные в таблице


Это 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();
}

1 Ответ

3 голосов
/ 18 февраля 2020

если вы используете функцию find (), то не используйте first ()

$user=App\User::find(1);
$user->email_send=1;
$user->update();

, если приложение \ пользователь не работает, используйте команду App \ Models \ User;

$user=User::find(1);
$user->email_send=1;
$user->update();

Для обновления sslModel

$sslModel=App\sslModel::where('userID', Auth::id())->first();
$sslModel->email_send=1;
$sslModel->update();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...