我有以下表格:
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',
),
...
);
}
}
如何获得至少拥有一名得分手的所有比赛模型?
答案 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();