我有一張表,用於存儲密碼重置令牌。該表中有4個字段。它們是user_id
,token
,created_at
和updated_at
。爲什麼我不能使用在Laravel中使用相同請求創建的相關模型?
我想要做的是檢查用戶是否已經有密碼重置令牌。如果用戶已經擁有密碼重置令牌,我想發送具有相同標記的電子郵件。如果用戶沒有令牌,我想創建令牌然後發送電子郵件。
問題是,如果令牌已經創建,我可以發送電子郵件。但是,我收到錯誤Trying to get property of non-object (View: /var/www/html/project_name/resources/views/emails/passwordResetLink.blade.php)
。
爲什麼我不能在數據庫中創建記錄後直接使用$user->passwordResetLink->token
訪問密碼重置令牌?這是我的代碼。
$user = User::findByUsername(request('username'));
if($user)
{
if(count($user->passwordResetLink))
{
$user->passwordResetLink->save();
}
else
{
$token = md5(str_random(16));
$record = new PasswordReset;
$record->user_id = $user->id;
$record->token = $token;
$record->save();
}
Mail::to($user)->send(New \App\Mail\PasswordResetLink($user));
return 1;
}
我正試圖使用$user->passwordResetLink->token
訪問用戶的密碼重置令牌。如果記錄已經創建,它工作正常,但如果記錄不存在,則不起作用。
PS:我使用save()
因爲touch()
不能正常工作,因爲我沒有在我的數據庫中的表password_resets
領域id
。讓我知道代碼有什麼問題。我知道save()
不會工作,因爲我沒有更新任何東西!
更新:我解決了我的錯誤,將郵件行替換爲Mail::to($user)->send(New \App\Mail\PasswordResetLink(User::find($user->id)));
。
它的工作!謝謝! –
是啊!我也刪除了我的評論! –