這是laravel 5.3Laravel改變排序
當我預覽使用這個電子郵件:
$wantsheet_products = WantsheetProduct::orderByRaw(EmailService::WANTSHEET_PRODUCT_ORDER_SQL)->get();
View::make('email.wantsheet.email_wantsheet_to_supplier', ['wantsheet_products' => $wantsheet_products]);
排序是正確的。也就是說,排序是['a','b','c']我想要的方式。
編輯底部
現在看到的音符實際發送了郵件(我排隊它們)時,排序發生變化,再次未排序,魔?構造函數和構建功能
class WantsheetToSuppliersMail extends Mailable
{
public $wantsheet_products;
public $to_email;
/** @var WantsheetContact $wantsheetcontact*/
public $wantsheetcontact;
use Queueable, SerializesModels;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($wantsheet_products)
{
//$wantsheet_products is a standard eloquent model collection, e.g. i get it like this: WantsheetProduct::orderByRaw(self::WANTSHEET_PRODUCT_ORDER_SQL)->get()
$this->wantsheet_products = $wantsheet_products; //is ['a','b','c']
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
// $this->wantsheet_products is ['b','a','c'];
$subject = 'abc';
return $this->from('[email protected]')->view('email.wantsheet.email_wantsheet_to_supplier', [])->subject($subject);
}
}
編輯續之間的變化情況。 現在,當我做
WantsheetProduct::orderByRaw(EmailService::WANTSHEET_PRODUCT_ORDER_SQL)->get()->toArray();
它不會破壞任何再排序(所以它的工作原理)。但這很愚蠢,不是嗎?
我猜這是一個集合保存問題。基本上,如果你改變順序而不關心鍵名,你還需要明確地告訴集合你已經改變了鍵的順序,以防需要將鍵傳遞給別的東西。嘗試' - > get() - > values();' –
@JoelHinz在將對象交給構造函數之前調用' - > values()'似乎並不能解決問題,'$ this-> wantsheet_products-> values( )'按照他們應該的方式來對待他們 – Toskan
是的,我不確定,所以我只是把它寫成評論。值得一試。希望別人能給你正確的答案! –