2017-08-07 35 views
0

我正在嘗試獲取具有文件集合的mailable安裝程序。郵件控制器看起來像:將集合傳遞給可打印的| Laravel 5.4

<?php 

namespace App\Mail; 

use App\Document; 
use App\Order; 
use Illuminate\Bus\Queueable; 
use Illuminate\Mail\Mailable; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Contracts\Queue\ShouldQueue; 
use App\User; 

class OrderComplete extends Mailable 
{ 
use Queueable, SerializesModels; 

public $user; 
public $order; 
public $documents; 

/** 
* Create a new message instance. 
* 
* @return void 
*/ 
public function __construct(User $user, Order $order, Document $document) 
{ 
    // 
    $this->user = $user; 
    $this->order = $order; 
    $this->documents = $document; 
} 


/** 
* Build the message. 
* 
* @return $this 
*/ 
public function build() 
{ 
    return $this->markdown('emails.customers.complete'); 
} 
} 

控制器調用mailable看起來像;因爲我認爲這應該工作

Type error: Argument 3 passed to App\Mail\OrderComplete::__construct() must be an instance of App\Document, instance of Illuminate\Database\Eloquent\Collection given, called in /Users/ap/sites/propair/app/Http/Controllers/OrderController.php on line 253

我很困惑:

use App\Document; 
    // other code... 
$documents = Document::where('order_id', $orderId) 
     ->where('product', 'like', '%response') 
     ->get(); 
    Mail::to($customer) 
     ->send(new OrderComplete($customer, $order, $documents)); 

,但我不斷收到此錯誤?

感謝

回答

1

此函數聲明:

public function __construct(..., Document $document) 

意味着PHP將強制執行$documentApp\Document一個實例。

如果你想傳遞一個集合,而不是,你需要做的:

public function __construct(..., \Illuminate\Database\Eloquent\Collection $documents) 
+0

真棒,非常感謝你,我不知道它的工作這樣。愚蠢的問題,收藏如何知道什麼屬性?如果它從集合中獲取它們,爲什麼還要麻煩定義一個實例(爲什麼實例不能以同樣的方式獲取屬性)? – Ash

+0

一個集合基本上(它也有一些有用的幫助函數)一組模型。它並不真正「知道」擁有屬性 - 屬性來自其中包含的各個模型。 – ceejayoz