我使用 Laravel( Eloquent 模型)連接到舊資料庫。
我的模型的字串屬性用空格填充。(由于資料庫內部的資料)
當前輸出(作為可讀性的 JSON)如下所示:
{
"THIRDNAME": "Company ",
"THIRDNAME2": "",
"THIRDADDR": "Street Of Company 117/1 ",
"THIRDADDR2": "",
"THIRDZIP": "1740 ",
"THIRDCITY": "TERNAT "
}
我無法更改該資料庫(使用它的其他遺留工具),但我想在查詢資料庫時更改這些屬性。(使用 Eloquent 模型)
要得到這樣的東西:
{
"THIRDNAME": "Company",
"THIRDNAME2": "",
"THIRDADDR": "Street Of Company 117/1",
"THIRDADDR2": "",
"THIRDZIP": "1740",
"THIRDCITY": "TERNAT"
}
Laravel 檔案提到了“Mutators & Casting”,但它需要提供特定的欄位來進行轉換。
我想對所有模型的所有字串屬性應用自定義“強制轉換”或“修改器”(基本 TRIM 操作)。
你將如何在 Laravel 中實作這一目標?
謝謝
uj5u.com熱心網友回復:
特定于模型,您可以覆寫 hydrate() 方法:
class MyModel extends Model
{
use HasFactory;
protected $fillable = [
// ... //
];
public function hydrate(array $objects): Collection
{
return parent::hydrate(
array_map(function ($object) {
foreach ($object as $k => $v) {
if (is_string($v)) {
$object->$k = trim($v);
}
}
return $object;
}, $objects)
);
}
}
如果您想將其應用于所有模型,您可以使用抽象類擴展 Model,在那里覆寫 hydr 并將其作為您的基本模型。
這是有效的,因為Illuminate\Database\Eloquent\Builder在已從資料庫中檢索到的列上呼叫該方法。如果您使用的是較舊的 PHP 版本,請記住洗掉方法回傳簽名。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/364647.html
下一篇:無法安裝json-server
