Извлечение данных из базы данных и передача их как экземпляра объекта - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь передать идентификатор из запроса из одной таблицы базы данных в другую таблицу, к которой относится.
Но, поскольку они связаны, я должен передать его как экземпляр сущности (класса), к которой относится.
Это ошибка, которую я получил:

Аргумент 1, переданный в App \ Entity \ KeywordRating :: setKeywordId (), должен быть экземпляром App \ Entity \ Keywords, с целым числом, вызванным в C: \ xampp \ htdocs \ ratingAPI \ src \ Service \ KeywordRatingService.php в строке 26

Это мой код:

public function insertRating($params, ObjectManager $manager, KeywordsRepository $keyRep, ProvidersRepository $provRep)
{
    $keywordId = $keyRep->checkKeyword(strtolower($params['keyword']))->getId();
    $providerId = $provRep->checkProvider($params['provider'])->getId();

    $rating = new KeywordRating();
    $rating->setKeywordId(<Keywords instance> $keywordId);
    $rating->setProviderId(<Providers instance> $providerId);
    if($params['attr'] === 'rocks')
    {
        $rating->setRocksRating($params['rating']);
        $rating->setSucksRating(0);
    } else 
    {
        $rating->setRocksRating(0);
        $rating->setSucksRating($params['rating']);
    }
    $rating->setRocksVotes(10);
    $rating->setSucksVotes(8);
    $rating->setSumVotes(18);
    $rating->setScore(2.50);

    $manager->persist($rating);
    $manager->flush();
}

Это запрос sql:

public function checkKeyword($keyword)
{
    return $this->createQueryBuilder('k')
        ->where('k.keyword_name = :val')
        ->setParameter('val', $keyword)
        ->getQuery()
        ->getOneOrNullResult();
}

checkProvider () одинаков, только разные параметры.

Как мне это сделать?

1 Ответ

0 голосов
/ 12 октября 2018

Предполагая, что у вас есть пространство имен с именем Entities, где у вас есть все ваши классы сущностей, вы можете попробовать что-то вроде этого:

    $entityManager = $this->getDoctrine()->getManager();

    $queryBuilder = $entityManager->createQueryBuilder();
    $queryBuilder->select('keyword')
                ->from('App\Entity\Keywords', 'keyword')
                ->where($queryBuilder->expr()->eq('keyword.keyword_name', $queryBuilder->expr()->literal($keyword)));

    $result = $queryBuilder->getQuery()-> getOneOrNullResult();

    return $result;
...