Yii在模型中使用关系加入两个表

时间:2013-11-30 17:54:15

标签: php mysql yii yii-relations

嗨我有这两个表,我想在Yii中使用关系加入,问题是我很难弄清楚Yii关系是如何工作的。

picturepost
    id
    title
    link_stat_id

linkstat
    id
    link
    post_count

我也有一个有效的SQL查询。当我想搜索 picturepost

时,这是我希望我的关系结果的查询
SELECT picturepost.id, picturepost.title,linkstat.post_count   
FROM picturepost
RIGHT JOIN linkstat
ON picturepost.link_stat_id=linkstat.link;

当我搜索帖子时,我想要这样的东西。

$post = PicturePost::model() -> findByPk($id);
echo $post->linkCount;

这是我的表格以获取额外信息:

CREATE TABLE IF NOT EXISTS `picturepost` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `title` text COLLATE utf8_unicode_ci DEFAULT NULL,
     `link_stat_id` char(64) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM;
CREATE TABLE IF NOT EXISTS `linkstat` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `link` char(64) COLLATE utf8_unicode_ci NOT NULL,
  `post_count` int(11) DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `post_count` (`post_count`),
  KEY `link_stat_id` (`link`)
) ENGINE=InnoDB;

先谢谢,我希望我能清楚地解释清楚。

2 个答案:

答案 0 :(得分:0)

有一些关于此的教程,我不会重复,但是请你检查一下。

最简单的起点是在数据库中创建外键约束,然后使用Gii工具生成模型的代码,在本例中为表 picturepost

这应该会产生一个带有方法relations(),

的Picturepost
class Picturepost extends  {

public function relations()
{
   return array(
     'picturepost_linkstats' => array(self::HAS_MANY, 
                                 'linkstat', 'link_stat_id'),
   );
}

这使用* link_stat_id *字段作为外键(链接表的主键)链接2个表。

当您查询表格图片时,您可以自动拉入linkstat记录。

// Get the picturepost entry
$picturepost = PicturePost::model()->findByPk(1);

// picturepost_linkstats is the relationship name
$linkstats_records =  $picturepost->picturepost_linkstats;

答案 1 :(得分:0)

public function relations()
{
   return array(
     'linkstat' => array(self::HAS_ONE, 'Linkstat', array('link_stat_id'=>'link')),
   );
}

更多关于yii relations

这假设您有一个活动记录模型Linkstat,它表示表linkstat中的数据。