php—从数据库中检索数据并将其作为实体示例传递

ve7v8dk2  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(400)

我正在尝试将id从一个数据库表的查询传递到与之相关的另一个表。
但是,因为它们是相关的,所以我必须将其作为相关实体(类)的示例来传递。
这是我的错误:
传递给app\entity\keywordrating::setkeywordid()的参数1必须是app\entity\keywords的示例,给定整数,在第26行的c:\xampp\htdocs\ratingapi\src\service\keywordratingservice.php中调用
这是我的密码:

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()相同,只是参数不同。
我该怎么做?

sf6xfgos

sf6xfgos1#

假设您有一个名为entities的命名空间,其中包含所有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;

相关问题