Nextras ORM fetchPairs(‚some_id‘, NULL) – Nextras\Orm\Repository::hydrateEntity() must be of the type array
- Čamo
- Člen | 798
Zdravím,
mám dojem, že som narazil na bug, alebo to nesprávne používam. Ide
o metódu, ktorá je implementovaná v repozitory cez mapper.
/**
* Class SurveyAnswersRepository
* @method ICollection|SurveyAnswer[] findSurveysAnswersForFilterSurveysForm( $surveyDef, $conditions )
*/
class SurveyAnswersRepository extends BaseRepository
...
Metoda findSurveysAnswersForFilterSurveysForm() pracuje s queryBuilderom a vyzerá asi takto
class SurveyAnswersMapper extends BaseMapper
{
public function findSurveysAnswersForFilterSurveysForm( SurveyDef $surveyDef, array $conditions )
{
$builder = $this->builder();
...
$result = $this->connection->queryArgs( $builder->getQuerySql(), $builder->getQueryParameters() );
return $result->fetchPairs('survey_def_question', NULL);
}
}
Keď testujem čo mi vráti fetchPairs() tak vidím správne pole
$id => $row
. Ale ORM sa hneď po fetchPairs() snaží namapovať
výsledok na ICollection a zavolá DbalMapper::toCollection()
kde
to padne na volaní
$result = array_map([$this->getRepository(), 'hydrateEntity'], $data);
pretože fetchPairs(‚id‘, NULL) vracia pole inštancíí
Nextras\Dbal\Result\Row a hydrateEntity(array $data)
očakáva
array. Vie niekto v čom je problém?
Díky.
Editoval Čamo (25. 10. 2017 11:20)
- David Matějka
- Moderator | 6445
Ahoj, tohle je ocekavane chovani nextras orm 2
kdyz pouzivas proxy metody z repository na mapper (tzn ty magicke
@method
), tak se nextras snazi ten vysledek prevest na pole entit.
resenim je nepouzit @method
, ale implementovat v repo klasicky
metodu a na mapper to preposlat rucne:
public function findSurveysAnswersForFilterSurveysForm(...)
{
return $this->getMapper()->findSurveysAnswersForFilterSurveysForm(.....);
}
v nextras orm 3 (ktere je ted v nejake beta fazi) doslo ke zmene a na automatickou konverzi na kolekci nedochazi. (to vsak ma za nasledek, ze jiz z mapperu musis vracet kolekci)