背包(变形)关系字段添加条件以防止 class 不存在时失败
Backpack (morph) relationship field add condition to prevent fail if class doesn't exists
这是我的关系:
Class Log extends Model {
public function entity()
{
return $this->morphTo();
}
}
在我的另一个 类:
Class User extends Model{
public function log()
{
return $this->morphOne(Log::class, 'entity');
}
}
这正如预期的那样有效,例如。如果 entity_type 是 User 并且 entity_id 是 14,它将给我 ID 为 14 的用户。当 entity_type 是简单的 SYSTEM 并且 entity_id 是 null 时问题就来了(遗憾的是我可以'改变这个)。通常如果不是背包我只会去
$log->entity_id ? $log->entity->name : '';
但在 Backpack 中我没能做到这一点。虽然试过了:
[
'name' => 'entity',
'label' => __('logs.entity_name'),
'type' => 'relationship',
'attribute' => 'name',
'options' => (function($query){
return $query->whereNotNull('entity_id')->get();
})
],
但这不起作用。任何建议我如何才能在我的领域获得与我在 blade 文件中显示的三元组相同的结果,我们将不胜感激。
我已经解决了,这是我的解决方案:
[
'label' => __('logs.entity_name'),
'type' => 'closure',
'function' => function ($entry) {
if ($entry->entity_id == null) {
return $entry->entity_type;
}
try {
return $entry->entity->name;
} catch (\Exception $e) {
return '';
}
},
],
这是我的关系:
Class Log extends Model {
public function entity()
{
return $this->morphTo();
}
}
在我的另一个 类:
Class User extends Model{
public function log()
{
return $this->morphOne(Log::class, 'entity');
}
}
这正如预期的那样有效,例如。如果 entity_type 是 User 并且 entity_id 是 14,它将给我 ID 为 14 的用户。当 entity_type 是简单的 SYSTEM 并且 entity_id 是 null 时问题就来了(遗憾的是我可以'改变这个)。通常如果不是背包我只会去
$log->entity_id ? $log->entity->name : '';
但在 Backpack 中我没能做到这一点。虽然试过了:
[
'name' => 'entity',
'label' => __('logs.entity_name'),
'type' => 'relationship',
'attribute' => 'name',
'options' => (function($query){
return $query->whereNotNull('entity_id')->get();
})
],
但这不起作用。任何建议我如何才能在我的领域获得与我在 blade 文件中显示的三元组相同的结果,我们将不胜感激。
我已经解决了,这是我的解决方案:
[
'label' => __('logs.entity_name'),
'type' => 'closure',
'function' => function ($entry) {
if ($entry->entity_id == null) {
return $entry->entity_type;
}
try {
return $entry->entity->name;
} catch (\Exception $e) {
return '';
}
},
],