/** * [$field, $lookupType, $column] * @param string $lookup * @return array * @throws \Exception */ protected function explainLookup($lookup) { $lookupArr = explode('__', $lookup); $lookupType = end($lookupArr); if ($this->lookuper->issetLookup($lookupType)) { $lookupType = array_pop($lookupArr); } else { $lookupType = 'exact'; } $lookup = implode('__', $lookupArr); $field = $this->metadata->findField($lookup); if ($this->metadata->hasFieldObj($field)) { return [$field, $lookupType, 't.' . $field->db_column]; } else { if (!isset($this->relatedSelectCols[$lookup])) { throw new \DomainException("Cant lookup for related field '{$lookup}' without selectRelated()"); } return [$field, $lookupType, $this->relatedSelectCols[$lookup]]; } }