У меня есть таблица со статьями.Статьи могут иметь один или несколько тегов.Я хотел бы получить симулированные статьи на основе их тегов.
Моя структура таблицы очень проста.По сути, это просто отношение «многие ко многим» между статьями и тегами
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 здесь .
наилучший способ сделать это в Doctrine с использованием Doctrine_Query без использования собственного SQL?