如何构造一个函数来检测一个关系是有效的还是失效的



我有两个模型:EntityEntityrelation。实体可以输入关系。我试着用现在和过去关系的列表构造一个表

Entity我有这个功能:

// Entity.php
public function activeMembership()
{
    return $this->hasOne('AppModelsEntityrelation', 'entitychild_id')->NotCeased()->Where('relationtype_id', '=', '4');
}

NotCeased是在Entityrelation模型中定义的范围:

// Entityrelation.php
public function scopeCeased($query)
{
    return $query->where('ceased', 1);
}
public function scopeNotCeased($query)
{
    return $query->where('ceased', 0);
}

ceased是关系表中的一列。

所以当我想获得一些活跃的会员资格时,我只需要这样做:

$object = Entity::find(1);

在我看来

$object->public function activeMembership()->count();

和一个简单的@foreach循环生成一个包含所有id = 1的实体的活动成员的列表。

我的问题

我想设计一个函数,该函数检查给定的Entity是否与ID = $parent_id(在entityparent_id中)的组织关系中的子节点。

  • 在发现活动关系时返回1
  • 当找到的关系过期时返回0 (ceased = 1)
  • 在与组织不存在任何关系时返回null

首先,你们的关系没有正确定义。您应该在Entity.php中设置:(相关文档)

public function entityRelation() {
    return $this->hasOne('AppModelsEntityrelation', 'entitychild_id');
}

一旦你有了这个,你就可以使用$entity->entityRelation来访问实体的关系。

一旦你有了这个,它很容易做所请求的功能:

public function myMethod(Entity $entity, $parent_id) {
    if ($entity->entityRelation && $entity->entityRelation->id === $parent_id) {
        return $entity->entityRelation->ceased ? 0 : 1;
    } else {
        return null;
    }
}

最新更新