Relacionamento de tabelas no Data Mapper (CI)

Se você não entendeu muito bem o post explicando como melhorar as recomendações de posts relacionados com o Data Mapper, este tutorial poderá ajudar.

Criei um material para apoiar a documentação do Data Mapper sobre o relacionamento de tabelas no banco de dados. Se você não está entendendo nada, recomendo que antes de continuar você leia:

  1. Usando o Data Mapper no Code Igniter – como instalar e configurar o Data Mapper
  2. Entendo o relacionamento de banco de dados

 

Nomenclatura das tabelas relacionais no Data Mapper

O primeiro passo para fazer o relacionamento de tabelas funcionar é estruturar o banco de dados para isso. Para ilustrar este post vamos criar um relacionamento "one to many" de usuários para posts.

Na nossa estrutura do banco de dados temos a tabela users e a tabela posts.

Por regra do Data Mapper as tabelas de relacionamento devem ser estruturadas da seguinte forma:

  1. Nome da primeira tabela do relacionamento (ordem alfabética)
  2. Underline "_"
  3. Nome da segunda tabela do relacionamento

No nosso caso temos as tabelas "users" e "posts", portanto nossa tabela de relacionamento que deve ser criada no banco de dados se chamará "posts_users" e terá três colunas:

id - INT, auto increment

user_id - INT

post_id - INT

Pronto, com esta tabela criada no nosso banco de dados podemos configurar nossas classes "User" e "Post" no Data Mapper.

 

Configurando as classes para relacionamento

Continuando o exemplo anterior da classe User, vamos adicionar a configuração de relacionamento, ela ficará assim:

class User extends DataMapper {
    var $table = "users";

    var $has_many= "posts, comments";

    function User()
    {
        parent::DataMapper();
    }
}

E agora nossa clase Post:

class Post extends DataMapper {
    var $table = "posts";

    var $has_one= "user";
    var $has_many= "comments";

    function User()
    {
        parent::DataMapper();
    }
}

 

Pronto, suas tabelas estão relacionadas pelo Data Mapper e você pode usufruir as facilidades do ORM para criar "innerjoins" que eu não entendo!

 

Salvando dados de relacionamento

Para salvar um relacionamento é simples, criamos os dois objetos que vamos relacionar e usamos o método save do Data Mapper.

É mais fácil exemplificar do que explicar:


$u = new User();
$u->where("login", "odesenvolvedor")->get();

$p = new Post();
$p->title = "Novo post"; $p->content = "Conteúdo html do nosso post"

// Salvamos o novo post e relacionamos ao nosso User
$p->save($u);

Para relacionar dois objetos já existentes a lógica é a mesma:

$u = new User();
$u->where("login", "odesenvolvedor")->get();

$p = new Post();
$p->
where("title", "Novo Post"); $p->get();

// Relacionamos o Post que já existia ao nosso User
$p->save($u);

Este é o básico do relacionamento de dados utilizando o Data Mapper. Para entender recomendo a leitura da documentação do DM.

Para um exemplo prático mais avançado veja como selecionar posts mais relevantes através da comparação de tags.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *