0

I know how to pass data to view but how do you pass data to a mailable? I'm also a bit confused on where to put the database call DB::select, in the controller or the mailable? So far I've tried this:

web.php:

Route::get('/test-email', 'App\Http\Controllers\TestMailController@test');

TestMailController.php:

<?php

namespace App\Http\Controllers;

use App\Mail\ContactMail;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;

class TestMailController extends Controller
{
    public function test()
    {
        return new ContactMail();
    }
}

TestMail.php:

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
use phpDocumentor\Reflection\DocBlock\Tags\Var_;

class TestMail extends Mailable implements ShouldQueue
{
    use Queueable, SerializesModels;

    public $data;

    public function __construct()
    {
        $this->data = DB::select('select * from db_name');
    }

    public function build()
    {
        return $this->markdown('emails.testmail')->with('data', $data);
    }
}
Artur Müller Romanov
  • 4,417
  • 10
  • 73
  • 132
  • 1
    Does this answer your question? [Laravel 5.4 Mail, passing data](https://stackoverflow.com/questions/42646751/laravel-5-4-mail-passing-data) – miken32 Nov 02 '21 at 20:07

1 Answers1

2

You need to use $this :

public function build()
{
    return $this->markdown('emails.testmail')->with('data', $this->data);
}
Wahyu Kristianto
  • 8,719
  • 6
  • 43
  • 68