Michael
Michael

Reputation: 113

Undefined Variable in Laravel Command

I have added into a Laravel command mail::send to send an email to all users who meet the criteria. Whenever I run the first part of my foreach statement but gives me an [ErrorException] Undefined Variable: member whenever it gets to the emailing. My fire function code is below.

    public function fire()
{
    $members = Member::where('expire', '=', Carbon::now()->today());

    $this->info('We found ' . $members->count() . ' expiring today (' . Carbon::now()->today() . ')!');

    foreach ($members->get() as $member) {
        $member->active = "0";
        $member->save();
        $this->comment($member->first_name . ' has been updated.'); //This is the last line which runs

        Mail::send('emails.member.membership_expired', array('name'=>$member->first_name. ' ' . $member->last_name), function($message){
            $message->to($member->email, $member->first_name . ' ' . $member->last_name)->subject('Your Membership has Expired');
        });
    }

}

Upvotes: 0

Views: 716

Answers (1)

lukasgeiter
lukasgeiter

Reputation: 153120

With Mail::send you use a closure (also called anonymous function). To use local variables inside the closure you have to pass them in with use. Like that:

Mail::send('emails.member.membership_expired',
    array('name'=>$member->first_name. ' ' . $member->last_name),
    function($message) use ($member){
        $message->to($member->email, $member->first_name . ' ' . $member->last_name)->subject('Your Membership has Expired');
    }
);

Upvotes: 3

Related Questions