我在我的專案中使用 Laravel 審計,我需要能夠在視圖上顯示模型“名稱”欄位。我得到這樣的模型
$audit = \OwenIt\Auditing\Models\Audit::find($id);
$type = $audit->auditable_type;
$model = $type::where('id',$audit->auditable_id)->get();
我可以像這樣回圈選擇的模型
foreach ($model[0] as $key => $val) {
if (str_contains($key,'name')) {
$mname = $key;
$mval = $val;
}
}
模型具有標識名稱的各種鍵,例如:用戶模型具有“名稱”,組織模型具有組織名稱
我想從每個包含字串“name”的模型中獲取第一個鍵和值,但是使用上面的方法或 strpos 會拋出一個錯誤,提示 $mname 未定義。我哪里錯了?
uj5u.com熱心網友回復:
您也可以使用 first() 代替 get(),而不必使用 $model[0]
foreach ($model as $key => $val) {
if (str_contains($key,'name')) {
$mname = $key;
$mval = $val;
}
}
uj5u.com熱心網友回復:
所以我不完全確定你在追求什么,但這可能會奏效
$models = $type::where('id',$audit->auditable_id)->get();
$modelsWithName = $models->map(function($model) {
foreach($model->getAttributes() as $attribute) {
if (str_contains($attribute, 'name')) {
$model->mname = $attribute;
return $model;
}
return null;
}
})->filter(function($model) {
return $model !== null;
});
首先我們映射你的模型,我們添加一個名為 mname 的屬性并將其設定為正確的屬性,然后我們回傳模型,如果沒有 name 屬性我們回傳 null,然后我們過濾掉 null,所以我們最終得到具有 mname 屬性集的模型集合。
如果你有 2 個名字,這也不起作用。例如 first_name 和 last_name
但是,我個人只會為您的模型添加屬性.. https://laravel.com/docs/9.x/eloquent-mutators
uj5u.com熱心網友回復:
通過把它變成一個陣列來破解它
$model = $type::where('id', $audit->auditable_id)->first()->toArray();
foreach ($model as $key => $val) {
if (str_contains($key, 'name')) {
$mname = $key;
$mval = $val;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/452476.html
