2017-11-24 21 views
1

問題:私は自分のクエリにユーザーIDを提供することで、すべての企業をユーザーに関連させようとしています。Symfony 2.7 - 列が見つかりません - 多対多の関係

私は取得していますエラー:

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 

私は私の実体 "ユーザー" と多対多の関係を持っている実体 "会社" を持っている

Company.php

/** 
* @var ArrayCollection 
* 
* @ORM\ManyToMany(targetEntity="Dbm\UserBundle\Entity\User") 
* @ORM\JoinTable(name="company_representatives") 
*/ 
private $representatives; 

User.phpはエンティティクラスのCompanyとは関係がありません。

ので、私の多対多の関係で、私は「のcompany_id」と「user_idの

以下のコードが含まれていますcompany_representativesテーブルを持っているとすると、エラーが見つかりません「コラム」を引き起こすものです。

$companies = $em->getRepository('DbmPortalBundle:Company')->findBy(array('representatives' => $user->getId())); 

-cacheは

をクリアされている - [マッピング]と[データベース] = OK教義を使用している場合:スキーマ:私のコンストラクタ

でのArrayCollectionとして

-Iインスタンス化の代表を検証

編集

私は、今のところトリックを行う回避策を使用しました。これを後で修正したいと思うでしょう。私の回避策は、私のuser_idにリンクされているすべての企業のIDを見つけるために、自分の "company_representatives"テーブルに生のSQLを直接使用することです。それを使って私は会社のリポジトリにIDを持つ "FindBy"を使って、すべての企業のオブジェクトを取得することができます。

答えて

0

ArrayCollectionをCompany.phpの_construct()メソッドで初期化していますか?

// Entity/Company.php 

public function __construct() { 
    $this->representatives = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

... 

doctrineのマニュアルhereを参照してください。

+0

動作しませんでした。私はまたManyToMany双方向として私のエンティティを設定しようとしましたが、私はまだキャッシュクリア後に同じエラーを取得しています – Phil

0

PHPアプリ/コンソール教義に試してみてください:スキーマ:あなたは(多分それはでサポートされる多くの関係に多くのfindBy(またはいずれかの方法を見つける)を使用することはできません

0

--force更新未来)。 条件が正しく設定されている "WHERE company_representatives.user_id =?" parct [177] "をdoctrineで作成しましたが、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エンティティに関係を追加することをお勧めし、一人のユーザーのすべての企業を取得することです

$user->getCompanies(); 
関連する問題