0

私はsymfony2とdoctrine2をほんの数日しか学んでいないので、経験豊富な人にとってはばかげているかもしれない多くの疑問があります。

'tags'フィールドを持つブログ記事クラスがあります:

class Article 
{
    /**
     * @ORM\Column(type="array")
     */
     protected $tags;
}

これで、Doctrineがそれらを次の形式の「longtext」タイプとしてDBに保存していることがわかります。

a:4:{i:0;s:8:"symfony2";i:1;s:3:"php";i:2;s:8:"paradise";i:3;s:7:"symblog";}

選択したタグでタグ付けされたすべての記事を表示するタグページを作成したので、ブログ記事の「タグ配列」にこのタグが含まれているかどうかを確認する必要があります。

public function getByTag($tag)
{
    $likelyBlogs = $this->createQueryBuilder('b')
        ->select('b')
        ->where('LOWER(b.tags) LIKE :tag')
        ->setParameter('tag', '%:"'.$tag.'"%')
        ->getQuery()
        ->getResult();

    return $likelyBlogs;
}

これは完全に機能しますが、-> where('LOWER(b.tags)LIKE:tag')は私にはちょっとハッキーに見えるので、値が配列に存在するかどうかを確認する他の「自然な」方法があるかどうかを確認したいと思います?

4

1 に答える 1

0

多対多の関係を見てみましょう: http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html#many-to-many-unidirectional

タグをブログ投稿と同じ行に保存したい場合は、MongoDB などの NoSQL データベースの使用を検討する必要があります。ただし、通常の SQL では、テーブルを正規化し、タグを 1 つのテーブルに配置する方が適切です。

于 2012-12-05T13:58:05.417 に答える