gabogabans
gabogabans

Reputation: 3553

Cannot use PHP trait inside laravel model

I have a trait I use to send mails using mailgun PHP sdk, I'm getting the following error when I try to send mails:

 Trait 'App\Models\sendMailgunSdkApi' not found

This is my Discount model where I use the trait inside sendDiscountMail1 method,

<?php
namespace App\Models;


use Illuminate\Database\Eloquent\Model;
use App\Models\DiscountCode;
use App\Models\Order;
use Carbon\Carbon;
use App\Models\Scopes\Discounts;
use Mailgun\Mailgun;
use App\Traits\SendMail;


class Discount extends Model
{


    use Discounts, sendMailgunSdkApi;

      public static function sendMail1($order)
    {

        $mailData = 
        [
            'order' => $order
        ];

        $mail = $this->sendMailgunSdkApi('emails.discounts.discount-mail-1', $mailData, 'Disfruta de tu nuevo descuento en '.config('app.name').'.', '[email protected]');

        return response()->json([
            'mail' => $mail,
        ]);
    }


}

Why is it trying to look for a trait in my models folder?

My trait just in case:

<?php
namespace App\Traits;


trait SendMail
{


    public function sendMailgunSdkApi($view, $mailData, $subject, $to)
    {
        $html = view($view, compact('mailData'))->render();

        $result = app(Mailgun::class)->messages()->send(config('mail.mailgun.domain'), [
            'from' => config('mail.from.name').' <'.config('mail.from.address').'>',
            'to' => $to,
            'subject' => $subject,
            'html' => $html,
        ]);

        return $result;
    }




}

Upvotes: 2

Views: 933

Answers (1)

Dilip Hirapara
Dilip Hirapara

Reputation: 15296

use SendMail as a trait and then call sendMailgunSdkApi function

use App\Traits\SendMail;

class Discount extends Model
{
    use Discounts,SendMail;

    public static function sendMail1($order)
    {

        $mailData = 
        [
            'order' => $order
        ];

        $mail = $this->sendMailgunSdkApi('emails.discounts.discount-mail-1', $mailData, 'Disfruta de tu nuevo descuento en '.config('app.name').'.', '[email protected]');

        return response()->json([
            'mail' => $mail,
        ]);
    }

}

Upvotes: 4

Related Questions