dimanche 23 septembre 2018

Couldn't get relation model value in maatwebsite laravel

The work of this function is to generate report of specific condition. Thus i am generating report with two tables ( User and Booking ) With primary key is userid and bookingid. Both the table is be clubbed into relations. Now i want to generate excel with using maatwebsite package at this condition. From (booking table) and to (booking table) with ticketstatus (booking table) and also with usertype ( from usertable ). For example From 01.09.2018 to 23.09.2018 with ticket status as "booked " and usertype as "Normal or agent". But i am getting an error, i am using FromQuery method in maatwebsite to perform this function.

I am adding all the codes here, User Model :

<?php

namespace App;
use App\Booking;
use App\Wallet;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
protected $primaryKey = 'userid';

protected $fillable = ['name', 'phone', 'email','password','usertype'];

protected $dates = [
    'createdAt'
];

const CREATED_AT = 'createdAt';
const UPDATED_AT = 'updatedAt';

public function bookings()
{
    return $this->hasMany('App\Booking', 'userid');
}

public function walletUsers()
{
    return $this->hasOne('App\Wallet', 'userid');
}

public function supports()
{
    return $this->hasMany('App\Help', 'userid');
}

public function getNameAttribute($value)
{
    return ucfirst($value);
}

}

Booking Model :

<?php

namespace App;
use Carbon\Carbon;

use Illuminate\Database\Eloquent\Model;

class Booking extends Model
{
protected $primaryKey = 'bookingid';

protected $dates = [
    'createdAt','updatedAt'
];

const CREATED_AT = 'createdAt';
const UPDATED_AT = 'updatedAt';

public function users()
{
    return $this->belongsTo('App\User', 'userid');
}

public function getDateOfIssueAttribute($value) {

    return Carbon::parse($value)->format('d-M-Y , h:m a');
}

public function getDateOfCancellationAttribute($value) {

    return Carbon::parse($value)->format('d-M-Y , h:m a');
}

public function getDojAttribute($value) {

    return Carbon::parse($value)->format('d-M-Y , h:m a');
}



}

Now Controller :

public function report(Request $request){

    $from = $request->from;
    $to = $request->to;
    $bookingtype = $request->bookingtype;
    $usertype = $request->usertype;

    return (new BookingsExport($from, $to, $bookingtype, $usertype))- 
    >download('invoices.xlsx');
    }

Route :

    Route::post('/admin/reports/collect',[

    'uses' => 'ReportController@report',
    'as' => 'reports.generate'
     ]);

Maatwebsite Class:

    <?php

    namespace App\Exports;

    use App\Booking;
    use App\User;
    use Carbon\Carbon;
    use App\Http\Controllers\ReportController;
    use Maatwebsite\Excel\Concerns\FromQuery;
    use Maatwebsite\Excel\Concerns\Exportable;
    use Maatwebsite\Excel\Concerns\WithHeadings;
    use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
    use Maatwebsite\Excel\Concerns\ShouldAutoSize;
    use PhpOffice\PhpSpreadsheet\Shared\Date;
    use Maatwebsite\Excel\Concerns\WithColumnFormatting;
    use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
    use Maatwebsite\Excel\Concerns\WithMapping;


    class BookingsExport implements FromQuery, WithStrictNullComparison,                                
    WithHeadings, ShouldAutoSize, WithColumnFormatting, WithMapping
   {
    use Exportable;

public function __construct($from, $to, $bookingtype, $usertype)
{
    $this->from = $from;
    $this->to = $to;
    $this->bookingtype = $bookingtype;
    $this->usertype = $usertype;
}

public function headings(): array
{
    return [

        'Booking Id',
        'Block Key',
        'Bus Type',
        'DOJ',
        'status',
        'Created At',
        'Updated At',
        'Usertype',
        'Name'
    ];
}

 public function map($booking): array
{
    return [
        $booking->bookingid,
        $booking->blockkey,
        $booking->busType,
        $booking->doj,
        $booking->status,
        $booking->createdAt,
        $booking->updatedAt,
        $booking->users->usertype,
        $booking->users->name
    ];
}


public function columnFormats(): array
{
    return [
        'D' => 'dd-mm-yyy',
        'E' => NumberFormat::FORMAT_DATE_DDMMYYYY
    ];
}


public function query()
{
    $from = $this->from;
    $to = $this->to;
    $bookingtype = $this->bookingtype;
    $usertype = $this->usertype;

    if(isset($from) && isset($to) && is_null($bookingtype) && is_null($usertype))
    {

    return Booking::query()->whereBetween('createdAt',[$from, $to]);

    }


    if(isset($from) && isset($to) && isset($bookingtype) && is_null($usertype))
    {

    return Booking::query()->whereBetween('createdAt',[$from, $to])->where('status','=', $bookingtype);

    }


    if(isset($from) && isset($to) && isset($bookingtype) && isset($usertype))
    {

    return Booking::query()->with('users')->whereHas("users", function($subQuery){ 
    $subQuery->where("usertype", "=", $usertype);})->whereBetween('createdAt',[$from, $to])->where('status','=', $bookingtype);

    }

}

}

The error i am getting is "Undefined variable: usertype" from the last query of Maatwebsite class file. But i am seeding all the values from controller to this, i even dd($usertype) but i am getting the value as agent, but it shows error while using in it query ! Kindly guide



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire