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:
- Usando o Data Mapper no Code Igniter – como instalar e configurar o Data Mapper
- 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:
- Nome da primeira tabela do relacionamento (ordem alfabética)
- Underline "_"
- 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.