हमने अब अपने बेस मॉडल को निम्नलिखित कार्यात्मकता के साथ विस्तारित करके सभी मॉडलों के लिए इसे सामान्य रूप से हल कर लिया है:
- हम ज्यामितीय डेटा रखने वाली विशेषताओं की एक सरणी को परिभाषित करते हैं।
- अगर हम इसे टेक्स्ट के रूप में ऑटो-लोड करना चाहते हैं, तो हम प्रति-मॉडल-आधार पर निर्णय लेते हैं।
- डेटाबेस से टेक्स्ट के रूप में ज्यामिति विशेषताओं का चयन करने के लिए हम डिफ़ॉल्ट क्वेरी बिल्डर को बदलते हैं।
यहां बेस मॉडल का एक अंश दिया गया है जिसका हम अब उपयोग करते हैं:
/**
* The attributes that hold geometrical data.
*
* @var array
*/
protected $geometry = array();
/**
* Select geometrical attributes as text from database.
*
* @var bool
*/
protected $geometryAsText = false;
/**
* Get a new query builder for the model's table.
* Manipulate in case we need to convert geometrical fields to text.
*
* @param bool $excludeDeleted
* @return \Illuminate\Database\Eloquent\Builder
*/
public function newQuery($excludeDeleted = true)
{
if (!empty($this->geometry) && $this->geometryAsText === true)
{
$raw = '';
foreach ($this->geometry as $column)
{
$raw .= 'AsText(`' . $this->table . '`.`' . $column . '`) as `' . $column . '`, ';
}
$raw = substr($raw, 0, -2);
return parent::newQuery($excludeDeleted)->addSelect('*', DB::raw($raw));
}
return parent::newQuery($excludeDeleted);
}