0

次のテーブルがあります。

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',
             ),
             ...
        );
    }
}

少なくとも 1 つのスコアラーを持つすべての Match モデルを取得するにはどうすればよいですか?

4

2 に答える 2

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();
于 2013-10-08T20:35:26.277 に答える