背包(变形)关系字段添加条件以防止 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 '';
           }
     },
],