如何使用Doctrine基于标签获取类似对象

时间:2011-01-20 15:17:53

标签: php mysql doctrine

我有一张桌子上有文章。文章可以有一个或多个标签。我想基于他们的标签检索类似的文章。

我的表结构非常简单。它基本上只是文章和标签之间的多对多关系

abstract class BaseArticle extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->setTableName('article');
        $this->hasColumn('id', 'integer', 8, array(
             'type' => 'integer',
             'length' => 8,
             'primary' => true,
             'autoincrement' => true,
             ));
        $this->hasColumn('title', 'string', null, array(
             'type' => 'string'
             ));
    }

    public function setUp()
    {

        $this->hasMany('Articletag', array(
             'local' => 'id',
             'foreign' => 'article_id',
             'cascade'=>array('delete')));

        $this->hasMany('Dbtag as Dbtags', array('refClass'=>'Articletag',
                'local' => 'article_id',
                'foreign'=>'tag_id'
                )
        );

    }
}


abstract class BaseDbtag extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->setTableName('dbtag');
        $this->hasColumn('id', 'integer', 4, array(
             'type' => 'integer',
             'length' => 4,
             'fixed' => false,
             'unsigned' => false,
             'primary' => true,
             'autoincrement' => true,
             ));
        $this->hasColumn('name', 'string', 255, array(
             'type' => 'string',
             'length' => 255,
             'fixed' => false,
             'unsigned' => false,
             'primary' => false,
             'notnull' => false,
             'autoincrement' => false,
             ));
    }

    public function setUp()
    {
        parent::setUp();
        $this->hasMany('Articletag', array(
             'local' => 'id',
             'foreign' => 'tag_id'));

    }
}

abstract class BaseArticletag extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->setTableName('articletag');
        $this->hasColumn('article_id', 'integer', 8, array(
             'type' => 'integer',
             'length' => 8,
             'fixed' => false,
             'unsigned' => false,
             'primary' => true,
             'autoincrement' => false,
             ));
        $this->hasColumn('tag_id', 'integer', 4, array(
             'type' => 'integer',
             'length' => 4,
             'fixed' => false,
             'unsigned' => false,
             'primary' => true,
             'autoincrement' => false,
             ));
    }

    public function setUp()
    {
        parent::setUp();
        $this->hasOne('Article', array(
             'local' => 'article_id',
             'foreign' => 'id'));

        $this->hasOne('Dbtag', array(
             'local' => 'tag_id',
             'foreign' => 'id'));
    }
}

我需要的是根据标签集检索类似的文章。我希望得到10篇按匹配标签排序的文章。

在本机SQL here中解决了类似的问题(使用电影而不是文章)。

在不使用本机SQL的情况下使用Doctrine_Query在Doctrine中执行此操作的最佳方法是什么?

0 个答案:

没有答案