समाधान 1:अपने चुने हुए कथनों में फ़ील्ड जोड़ने के लिए वैश्विक दायरे का उपयोग करना
वर्चुअल कॉलम के साथ एक समस्या यह है कि यदि आप इसे नहीं रोकते हैं तो एलोक्वेंट उन्हें अपडेट करने का प्रयास करेगा। आप इसे $fillable सरणी से बाहर कर सकते हैं और वैश्विक दायरे का उपयोग कर सकते हैं अपने मॉडल में वर्चुअल कॉलम जोड़ने के लिए, कुछ इस तरह:
protected static function boot()
{
parent::boot();
static::addGlobalScope('next_action', function (Builder $builder) {
$builder->addSelect(DB::raw('DATE_ADD(updated_at, INTERVAL days DAY) AS next_action'));
});
}
आपको यह ध्यान रखना होगा कि यह आपके मॉडल को MySQL से जोड़ देगा क्योंकि आपके द्वारा उपयोग किए जा रहे दिनांक फ़ंक्शन SQLite जैसे डेटाबेस में काम नहीं करेंगे।
समाधान 2:MySQL व्यू का उपयोग करना
आम तौर पर मैं क्या करता हूं जब मेरे पास कई परिकलित फ़ील्ड होते हैं जो एक MySQL दृश्य बनाते हैं। अपने इच्छित सभी परिकलित फ़ील्ड के साथ दृश्य बनाएं, फिर आप क्वेरी स्कोप की चिंता किए बिना उस दृश्य के लिए एक नया वाक्पटु मॉडल बना सकते हैं।
एक चेतावनी यह है कि आप निश्चित रूप से इस मॉडल पर बनाने/अपडेट/डिलीट का उपयोग नहीं कर सकते हैं, लेकिन यदि आप केवल प्रदर्शन उद्देश्यों के लिए मॉडल का उपयोग कर रहे हैं, तो यह कोई समस्या नहीं होनी चाहिए।