Учение Symfony OneToOne, как в QueryBuilder - PullRequest
0 голосов
/ 17 октября 2018

, как в построителе запросов Symfony, не работает и показывает ошибку!

это мой запрос:

    $apiToken = $this->createQueryBuilder('ud')
        ->select('ud.apiToken')
        ->where('ud.user LIKE :userPhone')
        ->setParameter('userPhone','%'.$phone)
        ->getQuery()
        ->getResult();

    return $apiToken;

и это ошибка:

[Semantical Error] line 0, col 64 near 'user LIKE :u': Error: Invalid PathExpression. Must be a StateFieldPathExpression.

Не могу найти какие-либо расширения для подобного в построителе запросов или в полезном описании!

Это мой объект UserDevice:

class UserDevice implements UserInterface, \Serializable
{
    /**
     * @var int
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(name="notification_token",type="string", nullable=true)
     */
    private $notificationToken;

    /**
     * @ORM\Column(name="api_token" , type="string", unique=true, nullable=true)
     */
    private $apiToken;

    /**
     * @ORM\OneToOne(targetEntity="User", inversedBy="device", fetch="EAGER")
     * @ORM\JoinColumn(name="user_phone", referencedColumnName="phone")
     */
    private $user;

}

1 Ответ

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

Вы должны использовать join запрос между таблицами UserDevice и User.

$apiToken = $this->createQueryBuilder('ud')
        ->select('ud.apiToken')
        ->where('u.phone LIKE :userPhone') // here Users phone field
        ->innerJoin('ud.user', 'u')
        ->setParameter('userPhone','%'.$phone)
        ->getQuery()
        ->getResult();

return $apiToken;
...