因此,圍繞功能挖掘有關查詢後,我發現這個解決方案:
我創建了一個新的類CustomQueryBuilder,它擴展了照亮\數據庫\查詢\生成器
在那裏,你可以通過Eloquent覆蓋get()/ select()/ where()方法。
然後,在你要更改的查詢時的方式,定義字段更改喜歡的機型:
protected $encrypted = [
'name',
'email',
];
在此之後,我創建了一個新的類CustomModel,它擴展了照亮\數據庫\雄辯\型號並有覆蓋newBaseQueryBuilder這樣的:
protected function newBaseQueryBuilder()
{
$connection = $this->getConnection();
return new CustomQueryBuilder(
$connection, $connection->getQueryGrammar(), $connection->getPostProcessor(), $this
);
}
裏面的CustomQueryBuilder您可以根據需要自定義構建器的所有方法。
有了這個設置,你可以在任何照亮\數據庫\雄辯\型號改變它來擴展你的CustomModel和繼承爲指定的列這個特殊的行爲。
要知道,從擴展CustomModel模型進行的所有查詢都將得到這個新的方法,所以做所有需要的檢查,不要亂用雄辯的正常行爲,這樣的事情:
public function where($column, $operator = null, $value = null, $boolean = 'and')
{
if ($this->model !== null && isset($this->model::$encrypted))
{
if (in_array($column, $this->model::$encrypted))
{
$column = DB::raw("CONCAT('CL::',$column)");
}
}
parent::where($column, $operator, $value, $boolean);
}
PS :我知道這聽起來很愚蠢與CONCAT示例,但與$加密屬性,你可以找出它不是串聯字符串。
是的,但我真正想要的是像平常一樣使用Eloquent,並且能夠始終自定義列。假設你想在模型內部鏈接一個where條件到你的函數,但是你不能,但是如果你重寫這些方法中的一個,無論你做什麼查詢,你總會收到相同的數據 – user2048076