Laravel 5.3 - 关系数组和问题的问题mailable - 未定义的索引

时间:2016-12-27 18:31:01

标签: php laravel laravel-5.3

这是在 SallaryCrudController

public function remindsallary(Request $request)
{
    $sallary = \App\Models\Sallary::where('isPaid', 'No')->get();
    $salcount = count($sallary);
    if ($salcount > 0) {
        Mail::to($request->user())->send(new RemindSallary($sallary));
        \Alert::success('Email sent with ' . $salcount . ' reminders.')->flash();
        return redirect('admin/sallary');
    } else {
        \Alert::error('There are no open payments.')->flash();
        return redirect('admin/sallary');
    }
}

这是我的 RemindSallary mailable:

class RemindSallary extends Mailable
{
use Queueable, SerializesModels;

/**
 * The Sallary instance.
 *
 * @var Sallary
 */
public $sallary;
public $employee;

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

/**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    $this->employee = \App\Models\Employee::where('id', $this->sallary['employee_id'])->first();
    return $this->view('emails.remindsallary')->subject('Payment reminder');
}
}

这是我的 remindsallary 视图:

@section('content')         
@foreach ($sallary as $emp)
<p>Name: {{ $employee->name }} :: Value: {{ $emp->value }}</p>
@endforeach

我尝试启动时遇到的错误是:

Undefined index: employee_id

描述

当我连续请求所有数据时,我可以打印关系。但在这种情况下,我要求所有行中的所有数据都是&#39; isPaid&#39; =&#39;否&#39;。

所以,我确定这是错的:

$this->employee = \App\Models\Employee::where('id', $this->sallary['employee_id'])->first();

因为它是一个我不能这样称呼它的对象,但我不知道怎么称呼它。我试过sallary-&gt; employee_id无济于事。当我这样做时,我得到:

Undefined property: Illuminate\Database\Eloquent\Collection::$employee_id

我该如何解决这个问题?我需要在Employee表上获取员工姓名并将其传递给mailable。

1 个答案:

答案 0 :(得分:1)

终于解决了

诀窍是直接调用这种关系,而不是完全引入“员工”模式。

我只需要在刀片视图中添加它:

 With ActiveSheet.PivotTables("PivotTable1").PivotFields("COB_TITLE")

        .PivotItems("CMD GRP").Visible = True
        .PivotItems("G1").Visible = True
        .PivotItems("G2").Visible = True


    End With