NBo*_*roy 0 php doctrine symfony doctrine-orm php-7
在我的虚拟机中的 Ubuntu 服务器上,此查询(请参阅实体代码后的方法)运行良好,但在我的在线服务器上,Doctrine 显示此错误:
[语法错误] 第 0 行,第 92 列:错误:预期的 Doctrine\ORM\Query\Lexer::T_WITH,得到 ','
这是 Profile 实体中的代码:
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Swagger\Annotations as SWG;
/**
* Description of Profile
*
* @ORM\Entity(repositoryClass="AppBundle\Repository\ProfileRepository")
* @SWG\Definition(@SWG\Xml(name="profile"))
*/
class Profile
{
/**
* @var int $id
*
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $lastName
*
* @ORM\Column(name="lastName", type="string", length=100, nullable=false)
* @Assert\NotBlank()
* @Assert\Type(type="string")
*/
private $lastName;
/**
* @var string $firstName
*
* @ORM\Column(name="firstName", type="string", length=100, nullable=false)
* @Assert\NotBlank()
* @Assert\Type(type="string")
*/
private $firstName;
/**
* @var Company $company;
*
* @ORM\ManyToOne(targetEntity="Company")
* @ORM\JoinColumn(name="company_id", referencedColumnName="id", nullable=true)
*/
private $company;
/**
* @var User $user
*
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
*/
private $user;
/**
* @var ProfileVariety $profileVariety
*
* @ORM\ManyToOne(targetEntity="ProfileVariety")
* @ORM\JoinColumn(name="profileVariety_id", referencedColumnName="id", nullable=true)
*/
private $profileVariety;
}
Run Code Online (Sandbox Code Playgroud)
Profile Repository 中的代码:
namespace AppBundle\Repository;
use Doctrine\ORM\EntityRepository;
/**
* Description of ProfileRepository
*
* @package AppBundle\Repository
*/
class ProfileRepository extends EntityRepository
{
public function findByEmail($email)
{
return $this->createQueryBuilder('profileByUserEmail')
->select('p')
->from('AppBundle\Entity\Profile', 'p')
->join('AppBundle\Entity\User', 'u')
->where('u.id = p.user')
->andWhere('u.email = :email')
->setParameter(':email', $email)
->getQuery()
->getResult();
}
}
Run Code Online (Sandbox Code Playgroud)
你能解释一下问题吗?
您应该p.user直接加入:
->select('p')
->from('AppBundle\Entity\Profile', 'p')
->join('p.user', 'u')
->where('u.email = :email')
Run Code Online (Sandbox Code Playgroud)
如果你显式地加入另一个实体类,Doctrine 期望你用WITH关键字指定 JOIN 条件,而不是在 WHERE 条件中:
->select('p')
->from('AppBundle\Entity\Profile', 'p')
->join('AppBundle\Entity\User', 'u', 'WITH', 'u = p.user')
->where('u.email = :email')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2045 次 |
| 最近记录: |