public function getPredicate($degreesOfKinship = self::SIBLINGS)
 {
     $siblingCondition = new Where();
     $personaId = $this->personaId;
     $fatherId = $this->fatherId;
     $motherId = $this->motherId;
     if ($this->isFlagSet($degreesOfKinship, self::BROTHER)) {
         $where = (new Where())->equalTo('father_id', $fatherId)->equalTo('mother_id', $motherId)->equalTo('gender', self::GENDER_MALE)->notEqualTo('id', $personaId);
         $siblingCondition->orPredicate($where);
     }
     if ($this->isFlagSet($degreesOfKinship, self::SISTER)) {
         $where = (new Where())->equalTo('father_id', $fatherId)->equalTo('mother_id', $motherId)->equalTo('gender', self::GENDER_FEMALE)->notEqualTo('id', $personaId);
         $siblingCondition->orPredicate($where);
     }
     if ($this->isFlagSet($degreesOfKinship, self::HALF_BROTHER_PATERNAL)) {
         $where = (new Where())->equalTo('father_id', $fatherId)->equalTo('gender', self::GENDER_MALE)->notEqualTo('id', $personaId);
         $where->andPredicate((new Where())->notEqualTo('mother_id', $motherId)->orPredicate((new Where())->isNull('mother_id')));
         $siblingCondition->orPredicate($where);
     }
     if ($this->isFlagSet($degreesOfKinship, self::HALF_BROTHER_MATERNAL)) {
         $where = (new Where())->equalTo('mother_id', $motherId)->equalTo('gender', self::GENDER_MALE)->notEqualTo('id', $personaId);
         $where->andPredicate((new Where())->notEqualTo('father_id', $fatherId)->orPredicate((new Where())->isNull('father_id')));
         $siblingCondition->orPredicate($where);
     }
     if ($this->isFlagSet($degreesOfKinship, self::HALF_SISTER_PATERNAL)) {
         $where = (new Where())->equalTo('father_id', $fatherId)->equalTo('gender', self::GENDER_FEMALE)->notEqualTo('id', $personaId);
         $where->andPredicate((new Where())->notEqualTo('mother_id', $motherId)->orPredicate((new Where())->isNull('mother_id')));
         $siblingCondition->orPredicate($where);
     }
     if ($this->isFlagSet($degreesOfKinship, self::HALF_SISTER_MATERNAL)) {
         $where = (new Where())->equalTo('mother_id', $motherId)->equalTo('gender', self::GENDER_FEMALE)->notEqualTo('id', $personaId);
         $where->andPredicate((new Where())->notEqualTo('father_id', $fatherId)->orPredicate((new Where())->isNull('father_id')));
         $siblingCondition->orPredicate($where);
     }
     return $siblingCondition;
 }
 /**
  * Fetch all or a subset of resources
  *
  * @param  array $params
  * @return ApiProblem|mixed
  */
 public function fetchAll($params = array())
 {
     $where = new Where();
     if (isset($params['nome']) && $params['nome'] != '') {
         $likeSpec = new Where();
         $likeSpec->like('nome', '%' . $params['nome'] . '%');
         $where->addPredicate($likeSpec);
         $likeSpec = new Where();
         $likeSpec->like('sobrenome', '%' . $params['nome'] . '%');
         $where->orPredicate($likeSpec);
     }
     $sort = null;
     if (in_array($params['sort'], array_keys((new ClienteEntity())->getArrayCopy()))) {
         $sort = $params['sort'];
     }
     $dbTableGatewayAdapter = new DbTableGateway($this->tableGateway, $where, $sort);
     return new ClienteCollection($dbTableGatewayAdapter);
 }