问题:我试图通过向查询提供用户ID来让所有与用户相关的公司。
我得到的错误:
CRITICAL - Uncaught PHP Exception Doctrine\DBAL\Exception
\InvalidFieldNameException: "An exception occurred while executing 'SELECT
t0.id AS id_1, t0.name AS name_2, t0.phone AS phone_3, t0.fax AS fax_4,
t0.country AS country_5, t0.address AS address_6, t0.zipcode AS zipcode_7,
t0.state AS state_8, t0.city AS city_9, t0.notes AS notes_10 FROM company t0
WHERE company_representatives.user_id = ?' with params [177]:
SQLSTATE[42S22]: Column not found: 1054 Unknown column
'company_representatives.user_id' in 'where clause'" at C:\wamp64
\www\Portail\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver
\AbstractMySQLDriver.php line 71
我有一个实体“公司”,它与我的实体“用户”具有ManyToMany关系
Company.php
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="Dbm\UserBundle\Entity\User")
* @ORM\JoinTable(name="company_representatives")
*/
private $representatives;
User.php与其实体类中的公司没有任何关系。
由于我的ManyToMany关系,我确实有一个 company_representatives 表,其中包含“ company_id ”和“ user_id ”
以下代码导致“未找到列”错误。
$companies = $em->getRepository('DbmPortalBundle:Company')->findBy(array('representatives' => $user->getId()));
-Cache已被清除
使用doctrine:schema:validate 时,- [Mapping]和[Database] = OK
-I在构造函数
中将代表实例化为ArrayCollection修改
我使用的解决方法现在可以解决这个问题。我显然想稍后解决这个问题。我的解决方法是直接在我的“company_representatives”表上使用原始SQL来查找链接到我的user_id的所有公司ID。然后,我可以在我公司的存储库中使用带有ID的“FindBy”来获取所有公司的对象。
答案 0 :(得分:0)
您是否在Company.php的_construct()方法中初始化ArrayCollection?
// Entity/Company.php
public function __construct() {
$this->representatives = new \Doctrine\Common\Collections\ArrayCollection();
}
...
请参阅学说文档here。
答案 1 :(得分:0)
尝试php app / console doctrine:schema:update --force
答案 2 :(得分:0)
您不能将 findBy (或任何查找方法)与多对多关系使用(可能将来会支持)。 您的情况是否正确构建" WHERE company_representatives.user_id =?'与params [177] "通过学说,但不添加与company_representatives的联接。
你想要的是获得一个用户的所有公司,我建议将关系添加到用户实体:
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="Company", inversedBy="representatives")
* @ORM\JoinTable(name="company_representatives")
*/
private $companies;
public function __construct()
{
$this->companies = new ArrayCollection();
}
public function getCompanies()
{
return $this->companies;
}
最后,您可以直接从用户实体获取公司:
$user->getCompanies();