我有两个模型:Entity
和Entityrelation
。实体可以输入关系。我试着用现在和过去关系的列表构造一个表
在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;
}
}