2017-08-25 7 views
0

TL; DR:getQuerySettings() - > setEnableFieldsToBeIgnored()を使用して、「ベース」テーブルの代わりにリレーションを処理するにはどうすればよいですか? array( 'fe_users.disable')を使用しても動作しません。TYPO3 Extbase:setEnableFieldsToBeIgnoredを使用するクエリービルダー

「公園」と呼ばれる「リーダー」、「管理者」、「パートナー」の3つのフィールドを持つDBモデルがあります。 allは、fe_user表のオプションの結合です。

ここで、特定のfe_userがリーダー、管理者またはパートナーのいずれかであるパー​​クを取得するリポジトリメソッドを作成します。これは、次のように動作します。

$query = $this->createQuery(); 
$where[] = $query->equals('parkusersLeader.uid', $userUid); 
$where[] = $query->equals('parkusersAdministrators.uid', $userUid); 
$where[] = $query->equals('parkusersPartner.uid', $userUid); 
$query->matching($query->logicalOr($where)); 

これは実際には、SQL JOINクエリを作成し、「fe_users」テーブルにMM-各テーブルのために作られているが、WHERE文が表結合fe_usersごとに有効になっていますそれに「fe_users.disable = 0」を追加します。したがって、どのパークにも複数のユーザが割り当てられ、そこに割り当てられたユーザの1人が無効になると、クエリ全体が失敗し、パークが返されません。

したがって、setEnableFieldsToBeIgnored()メソッドを使用してextbaseにfe_user joinの "disable"句をこの場所に追加しないようにするにはどうすればよいですか?私は試しました:

$query->getQuerySettings()->setEnableFieldsToBeIgnored(array('parkusersLeader.disable', 'parkusersLeader.disabled', 'fe_users.disabled', 'fe_users.disable', 'disabled', 'starttime')); 

これらのどれもSQLクエリを変更していないようです。

答えて

0

無効にするフィールドを明示的に無視するオプションを有効にする必要があります。 。

あなたは(これはすべてのレコードでのdisabled属性を無視しなければならないことは、フィールド定義に具体的にすることは可能であるかもしれないあなたのクエリ

$query->getQuerySettings()->setIgnoreEnableFields(true); 
$query->getQuerySettings()->setEnableFieldsToBeIgnored(['disable']); 

ために、次の設定を試してみました - 。あなたの例に従ってあなたはリポジトリ用にグローバルに設定することもできます)。

関連する問題