如何在Yii中根据相关模型选择所有模型

时间:2013-10-08 18:01:45

标签: php yii

我有以下表格:

CREATE  TABLE match (
    id INT NOT NULL PRIMARY KEY,
    home_team_id INT,
    away_team_id INT,
    ...
)

CREATE  TABLE scorer (
   id INT NOT NULL PRIMARY KEY,
   match_id INT,
   player_id INT,
   ....
)

在Match模型中,我定义了一个类似的关系:

class Match extends CActiveRecord {
    public function relations() {
        return array(
            'scorers' => array(
                self::HAS_MANY,
                'Scorer',
                'match_id',
             ),
             ...
        );
    }
}

如何获得至少拥有一名得分手的所有比赛模型?

2 个答案:

答案 0 :(得分:1)

来自论坛上的this article

$matches = Match::model()->with(array('scorers'=>array('joinType'=>'INNER JOIN','together'=>true)))->findAll();

虽然它看起来不对,但它未经测试。给它一个重击。

答案 1 :(得分:0)

如果您担心性能问题,请不要使用:

$matches = Match::model()->with(array('scorers'=>array('joinType'=>'INNER JOIN','together'=>true)))->findAll();

只是因为这会为每场比赛取得所有相应的得分手。

如果您不需要获取得分者数据,则应尝试在Match模型中添加此数据(仅作为示例):

public function findAllHavingScorer()
{
    $matchAlias = $this->tableAlias;
    $scorerTable = Scorer::model()->tableName();

    return $this->findAll(array(
        'condition'=>"EXISTS (SELECT * FROM $scorerTable WHERE $scorerTable.post_id=$matchAlias.id)",
    ));
}

在你必须使用它之后:

$matches = Match::model()->findAllHavingScorer();