Ошибка при отправке электронной почты с Laravel 5.6 в действии контроллера - PullRequest
0 голосов
/ 29 июня 2018

Я получаю ошибку Undefined property: stdClass::$email error

Код в моем действии контроллера:

...
use App\Mail\WelcomeMail;
use Illuminate\Support\Facades\Mail;

public function approve($id){
    $mail = DB::select('select pic_email from vendors where id = :id', ['id' => $id]);
    $user = DB::select('select roc_no from vendors where id = :id', ['id' => $id]);
    Mail::to($mail)->send(new WelcomeMail($user));
    return redirect('/account/pending')->with('success', 'Account approved!');
}

В приложении \ Mail \ WelcomeMail.php:

class WelcomeMail extends Mailable
{
    use Queueable, SerializesModels;

    public $user;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($user)
    {
        $this->user = $user;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.welcome');
    }
}

Я пишу код, следующий за руководством из https://www.5balloons.info/send-email-registration-laravel-authentication/

Я использую Mailtrap. Все учетные данные / конфигурации в .env являются правильными, так как работает встроенная функция сброса пароля Laravel. Так что не так с моим кодом?

Обновление: я собираюсь отследить ошибку и, возможно, от действия контроллера, которое является $mail = DB::select('select pic_email from vendors where id = :id', ['id' => $id]); Я использую SQL, значение возвращается. Затем я попытался с помощью tinker значение $mail возвращается в виде массива. Я думаю, что это проблема, которая вызывает сбой $mail.

Как это исправить? Использование extract() также ничего не дает.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Нет необходимости в двух разных запросах, вы можете выполнить это в одном запросе

$user = DB::selectOne('select roc_no,pic_email from vendors where id = :id', ['id' => $id]);
OR
$user = DB::table('vendors')->where('id',$id)->select('roc_no','pic_email')->first();
// $user->pic_email; email 
// $user->roc_no;  ROC NO  
0 голосов
/ 29 июня 2018

Функция DB::select возвращает массив объектов. DB::selectOne вернет один объект, проиндексированный по имени столбца.

Вы также можете объединить два запроса в один запрос, а затем получить доступ к именам столбцов следующим образом:

public function approve($id)
{
    $vendor = DB::selectOne('select pic_email, roc_no from vendors where id = :id', compact('id'));

    Mail::to($vendor->pic_email)->send(new WelcomeMail($vendor->roc_no));

    return redirect('/account/pending')->with('success', 'Account approved!');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...