大体ErrorはErrorメッセージを追うことで解消できることが多いのです。
text
[Semantical Error] ... ... : Error: Invalid PathExpression. Must be a StateFieldPathExpression.上記はORMのSELECTにJOINしているテーブルの外部キーを指定したときに発生しました。
Error: Invalid PathExpression. エラー発生
Joinしているテーブルに対して、直接p.TagとSELECTしてしまっています。
javascript
// In Product.php Entity
/**
* @var \Eccube\Entity\Tag
*
* @ORM\ManyToOne(targetEntity="Eccube\Entity\Tag")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="tag_id", referencedColumnName="id", nullable=false)
* })
*/
private $Tag;
...
// Query in ProductRepository
$qb = $this->createQueryBuilder('p')
->select([
'p.name',
'p.Tag'
]);Error: Invalid PathExpression. エラー解消法
下記IDENTITY()関数を使用することで、直に取得することが可能でした。
php
// Query in ProductRepository
$qb = $this->createQueryBuilder('p')
->select([
'p.name',
'IDENTITY(p.Tag) as tag_id'
]);とはいえ、解消してから気づいたのですが普段上記エラーが出ないのは、きちんとJOINをqueryで定義していたからですね。
php
// Query in ProductRepository
$qb = $this->createQueryBuilder('p')
->leftJoin('p.Tag', 't')
->select([
'p.name',
't.id as tag_id'
]);まとめ
普段と違う書き方で発生したエラーで、新たな関数を発見できて幸運でした。
IDENTITY()とかいままで使ったことがなかったですが、簡易的に取得できて便利に感じました。
下記サイトを参考にしました。SELECTに関する情報が網羅されています。
Symfonyおすすめ書籍
あまり種類がないのと、そもそもフレームワークとして情報が膨大なので、入門でも結構読み応えがあります。
📦Amazon で関連書籍・ツールを検索
Symfony PHP フレームワーク
Amazonで探す →(アソシエイトリンク)
