在Laravel模型中搜索包含'name'的钥匙



我在项目中使用Laravel审计,我需要能够在视图上显示模型"名称"字段。我得到这样的模型

$audit = OwenItAuditingModelsAudit::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没有定义。我哪里错了?

您也可以使用first((代替get((,而不必使用$model[0]

foreach ($model as $key => $val) {
if (str_contains($key,'name')) {
$mname = $key;
$mval = $val;
}
}

所以我不完全确定你想要什么,但这可能适用于

$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属性集的模型集合。

如果你有两个名字,这也不起作用。例如first_name和last_name

不过,我个人只想为你的模型添加一些属性。。https://laravel.com/docs/9.x/eloquent-mutators

通过将其变成数组来破解它

$model = $type::where('id', $audit->auditable_id)->first()->toArray();
foreach ($model as $key => $val) {
if (str_contains($key, 'name')) {
$mname = $key;
$mval = $val;
}
}

相关内容

最新更新