我在產品模型中有這個范圍:
public function scopeFirst($query) {
$query->select('id','name','price','qty');
}
我在頁面中需要的這個范圍!
我需要在同一領域,但在一個或兩列的另一頁select類似
public function scopeSecond($query) {
$query->select('id','name','price','qty','exprie_date');
}
如何避免這些范圍的重復!
有什么辦法要不然我得有第二個那個了!
uj5u.com熱心網友回復:
這是未經測驗的,但您應該能夠重用第一個范圍并向其中添加選定的列:
public function scopeSecond($query) {
$query->first()->addSelect([
'expire_date',
'other_column',
'...',
]);
}
該addSelect函式允許您將這些列添加到 SELECT 陳述句中,而無需完全覆寫它。這允許您使用第一個范圍并根據需要向其中添加其他列。
uj5u.com熱心網友回復:
要實施范圍,您不必選擇特定欄位。下面是一個專案的示例代碼:
// Article search by category with the author relation attached
public function scopeByCategory(Builder $query, $categoryId): Builder
{
$query->with('Author')
->where('category_id', $categoryId);
return $query;
}
因此,我們將范圍視為“給我符合此條件的記錄”。我們每次都簡單地查詢整行。這也有助于快取以僅接收行。
所以省略選擇只會給你所有的列和完整的記錄。
您的范圍在您的示例中沒有其他過濾器。那么這就是你需要的范圍嗎?將結果限制在特定列?
如果必須,請選擇其他答案。否則我想添加這種微優化即使在較大的專案中也不值得我們花時間。
在您的示例中,您添加'exprie_date'到選定的列。為什么不總是所有的?由于安全性,您的實作似乎并不謹慎。如果您想為每列實施安全策略,我們發現使用get{Attribute}Attribute效果更好,例如,''如果某人無權訪問該列,則回傳。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/349330.html
