0

はじめに

私はこちらのガイドに従っていますが、最後の部分で立ち往生しています: http://symfony.com/doc/2.0/cookbook/security/entity_provider.html

アカウント テーブルからクエリを実行し、グループ テーブルにも参加しようとしています。これは、中間テーブル account_group との多対多の関係です。

account Table Fields: id, firstName, and email

account_group Table Fields: account_id and group_id

group Table Fields: id, name, and role

問題

ここに私のDQLがあります:

        SELECT a.firstName, g.role
        FROM WikiRosterMainBundle:Account a
        LEFT JOIN a.groups g
        WHERE a.email = :email

内部サーバー エラーが発生します。

「SELECT a0_.id AS id0, a0_.firstName AS firstName1, a0_.email AS email3, g1_.role AS role18 FROM account a0_ LEFT JOIN account_group a2_ ON a0_.id = a2_.account_id LEFT JOIN group g1_ ON」の実行中に例外が発生しましたg1_.id = a2_.group_id WHERE a0_.email = ?' パラメータ {"1":"test@test.com"}:

SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

私が試したこと:

+ account_group テーブルへの主キーの追加 (機能しませんでした)

+ 独自の左結合 mysql クエリを作成し、それを phpmyadmin に入力する (単一の左結合で動作しますが、3 つのテーブルを結合しようとすると失敗します)

+参加/選択しているテーブルを反転

私が行った研究

mysql 5 で左結合が変更されたようです。ドキュメントとその他のスタック オーバーフローの質問を見てきました。

http://dev.mysql.com/doc/refman/5.0/en/join.html

5.0.12 の変更後の MySQL LEFT JOIN - クエリを書き直す方法

助けてくれてありがとう!

4

2 に答える 2

1

前述のように、最大​​の問題は table の名前付けGroupです。参照するたびにバッククォートを使用する必要があります。私はそれらを避けたいと思っていますが、それはあなたの呼びかけです。結合を行う方法は次のとおりです。

SELECT a.FirstName, g.Role
FROM Account a
LEFT JOIN account_group ag ON a.id = ag.account_id
LEFT JOIN `group` g ON ag.group_id = g.id
于 2013-03-28T21:52:34.870 に答える
1

基本的な問題は、group が SQL の予約済みの作業 (別名 GROUP BY) であることです。バック ティックを使用して問題を回避することは可能ですが、テーブルの名前を groupx などの別の名前に変更することをお勧めします。テーブル名を変更するだけで、エンティティをグループとして保持できます。

于 2013-03-28T21:43:00.540 に答える