public function getQuery()
{
if (null !== $this->query) {
return $this->query;
}
$provider = $this->createProvider($this->getEntity());
$foreignProvider = $this->createProvider($this->getForeignEntity());
$foreignKey = $this->getForeignKey();
$data = $provider->extract();
//find primary key
if ($foreignKey === null) {
$foreignKey = Inflector::singularize($provider->getDefinition()->getTableName()) . '_' . $provider->getDefinition()->getPrimaryKeyName();
}
$mapper = $foreignProvider->getDefinition()->getMapper()->setConnection($this->getConnection());
$foreignKeyValue = isset($data[$provider->getDefinition()->getPrimaryKeyName()]) ? $data[$provider->getDefinition()->getPrimaryKeyName()] : false;
//if no primary key is available, return a select
$query = $mapper->select();
if ($foreignKeyValue !== false) {
$query->where((new Query($this->getConnection()))->expr()->eq($foreignKey, $foreignKeyValue));
}
$this->query = $query;
return $this->query;
}