为什么我的持久集合是空的



>我正在使用带有Doctrine和MongoDB的Symfony 3框架。

我有两个处于一对多关系的文档。

/**
 * Class Waypoint
 * @package AppBundleDocument
 * @MongoDBDocument(collection="waypoints", repositoryClass="AppBundleRepositoryWaypointRepository")
 */
class Waypoint
{
    /**
     * @var int
     *
     * @MongoDBId(strategy="auto")
     */
    private $id;
    /**
     * @var ArrayCollection
     * @MongoDBReferenceMany(targetDocument="Comment", cascade={"delete"})
     */
    private $comments;
}
**
 * Class Comment
 * @package AppBundleDocument
 * @MongoDBDocument(collection="comments", repositoryClass="AppBundleRepositoryCommentRepository")
 */
class Comment
{
    /**
     * @var int
     *
     * @MongoDBId(strategy="auto")
     */
    private $id;
    /**
     * @var Waypoint
     *
     * @MongoDBReferenceOne(targetDocument="Waypoint", inversedBy="comments")
     * @AssertNotBlank()
     */
    private $waypoint;
}

现在,我从存储库查询中获取了部分Waypoint条目,并希望用树枝显示它们。

/**
 * WaypointRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class WaypointRepository extends DocumentRepository
{
    public function getWaypointsForCruiseByPage(Cruise $cruise, $page)
    {
        $displayLimit = 10;
        $amountToSkip = 0;
        if ($page > 1)
        {
            $amountToSkip = ($page -1) * $displayLimit;
        }
        $qb = $this->createQueryBuilder()
            ->select()
            ->field('cruise')->equals($cruise)
            ->field('isAutoWaypoint')->equals(false)
            ->sort('date', -1)
            ->skip($amountToSkip)
            ->limit($displayLimit)
        ;
        $qb
            ->addOr($qb->expr()->field('hasImage')->equals(true))
            ->addOr($qb->expr()->field('hasAudio')->equals(true))
            ->addOr($qb->expr()->field('description')->notEqual(''))
        ;
        return $qb->getQuery()->toArray();
    }
}

现在,我正在尝试做{{ waypoint.comments.count }}{{ waypoint.comments|length }}将始终为 0,即使我的 MongoDB 集合中有数据集。

如果我通过航点的 ID 在 CommentRepository 上获得评论,我会得到预期的结果。

// returns the expected results
public function getAllCommentsForWaypoint(Waypoint $waypoint)
{
    return $this->createQueryBuilder()
        ->select()
        ->field('waypoint')->equals($waypoint)
        ->getQuery()->toArray()
    ;
}

据我所知,映射很好,没有发现任何缺陷或错误。

为什么持久集合是空的,事件,尽管集合中有信息?

我不确定您如何创建文档,但这是我最好的镜头:

Waypoint::$comments不会映射为反侧,因此 ODM 期望在数据库的waypoint.comments字段中提供引用列表。很可能它不存在(即您没有明确地将新Comment添加到Waypoint中的集合中),这就是为什么您在查询航点时看到空集合,但在查询注释时有结果。鉴于您在Comment映射中inversedBy="comments",我想您忘记将Waypoint::$comments设置为反侧:

/**
 * @var ArrayCollection
 * @MongoDBReferenceMany(targetDocument="Comment", mappedBy="waypoint")
 */
private $comments;

相关内容

  • 没有找到相关文章

最新更新