Bengall
Bengall

Reputation: 1417

Retrieving data from database and passing it as instance of entity

I'm trying to pass id from query from one database table to another table to which is related.
But, since they are related I have to pass it as instance of the entity(class) to which is related.
This is error I got:

Argument 1 passed to App\Entity\KeywordRating::setKeywordId() must be an instance of App\Entity\Keywords, integer given, called in C:\xampp\htdocs\ratingAPI\src\Service\KeywordRatingService.php on line 26

This is my code:

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();
}

This is sql query:

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

checkProvider() is the same, only different parameters.

How do I do that?

Upvotes: 0

Views: 116

Answers (1)

user3267053
user3267053

Reputation: 166

Assuming you have a namespace called Entities where you have all your entities classes, you can try something like this:

    $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;

Upvotes: 1

Related Questions