0

文字列の配列を保持するPostフィールドを持つモデルを指定します。例:tags

Post:
  id: 1
  tags: ['a', 'b', 'c']

Post:
  id: 2
  tags: ['a', 'z']

配列からすべての値を含むモデルを取得するためのクエリの作成方法['a', 'b'](この例では、投稿 ID 1 のみを返す)

私はこれらについて考えてきました:

Doctrine ODM QueryBuilder の使用:

// is this correct?
$qb->expr()->field('tags')->all( array('a', 'b') );

Doctrine ORM QueryBuilder の使用:

$qb->expr()->all( /* the docs say to use DQL here.. is there no QueryBuilder alternative? */ )
4

1 に答える 1

1

array型マッピング名に惑わされました。ドキュメントを注意深く読むと、 のようなデータベース タイプがないことがわかりますarray

では、どの型にarrayマッピングされているのでしょうか? アンサーはtext. つまりLIKE、その上で操作を実行できます (ただし、これらはパフォーマンスに影響を与える可能性があります)。

したがって、私自身の質問に答えるには、そのような目標を達成するには、次のようなものを構築する必要があります。

$qb->where($qb->expr()->andX(
    $qb->expr()->like('tags', '?1'),
    $qb->expr()->like('tags', '?2'),
    $qb->expr()->like('tags', '?3')
))->setParameters(array(
    1 => '%"a"%',
    2 => '%"b"%',
    3 => '%"c"%'
));
于 2014-09-01T01:45:05.973 に答える