2013-10-08 9 views
0

У меня есть следующие таблицы:HowTo выбрать все модели, основанные на соответствующей модели в 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, 
    .... 
) 

В модели матча я определил отношение что-то вроде этого:

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

Как я могу получить все Совпадение модели, в которых есть хотя бы один бомбардир?

ответ

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(); 
1

От this article на форуме:

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

Это проверялось, хотя она выглядит. Дайте ему удар.

+1

+1, но вы должны исправить синтаксис: '$ matches = Match :: model() -> with (array ('scorers' => array ('joinType' => 'INNER JOIN', 'together' => true))) -> FindAll(); ' – soju

Смежные вопросы