Entendendo as “relations” (relações) do Yii Framework
Para mostrar que o código gerado reflete não apenas os atributos, mas também as relações (foreign keys) existentes entre as tabelas do BD.Consideremos, pois, uma estrutura de dados bem simples:
Nessa estrutura hipotética, cada aluno está vinculado a uma escola; por óbvio, uma escola pode possuir zero ou mais alunos. Na UML, esse tipo de relação é denominado dependência, como nos ensina o companheiro #SouDev Edgard Davidson. A partir dessas informações, o Gii (scaffolder do Yii Framework – veja aqui como habilitá-lo no seu projeto) pode gerar o código para os modelos. Desde a versão 1.0.1 do framework, não é mais necessário que as relações provenham das chaves estrangeiras previamente definidas no banco de dados; é possível defini-las em código, editando o corpo do método relations().
Do código gerado para ambos os modelos (Aluno e Escola, que se encontram na árvore do projeto sob protected/models), destaco os seguintes trechos:
O Gii capturou as definições de chaves estrangeiras e estabeleceu as relações entre as tabelas de acordo com aquelas. No caso, um aluno pertence a (self::BELONGS_TO) uma escola, que, por seu turno, tem vários (self::HAS_MANY) alunos.
A partir disso, abre-se uma miríade de possibilidades. Neste cenário, seria comum ter de apresentar, junto com as informações do aluno, o nome da escola no qual este estuda. Poderíamos escrever o seguinte:
|
|
|
Notem (linha 7) que, para obter o nome da escola, não foi preciso instanciar um objeto da classe Escola apenas para que obtivéssemos o nome da escola. Ao invés disso, beneficiamo-nos de uma relação definida no modelo Aluno.
De forma semelhante, a partir de uma instância da classe Escola, seremos capazes de listar todos os alunos vinculados a ela, escrevendo algo como:

O código da linha 6 é o bastante para se obter uma lista de alunos vinculados à escola, graças à relação definida na classe Escola.
Em ambos os exemplos, utilizei a técnica chamada lazy loading para recuperar dados relacionados. Há ainda outras formas de se fazer isso, bem como outros tipos de relações além de self::BELONGS_TO e self::HAS_MANY, sobre as quais você pode obter mais informações consultado o Guia Definitivo do Yii Framework.
Um aspecto final a ser salientado é que estivemos utilizando, durante todo o tempo, um outro padrão de desenvolvimento, denominado Active Record. Ele nos permitiu trabalhar com as informações do banco de dados sem lançar mão, em momento algum, da linguagem SQL. O Active Record, por sua vez, é uma das implementações possíveis de ORM (Object-relational mapping) .