-
Notifications
You must be signed in to change notification settings - Fork 1
Query interface
danillos edited this page Apr 14, 2011
·
4 revisions
Aqui será mostrado as diversas maneiras de como obter os dados do banco de dados usando o DrumonModel, os exemplos serão baseados no modelo abaixo:
<?php
class Post extends DrumonModel {
var $table_name = 'posts';
// var $primary_key = 'id'; // por padrão a chave primária é id.
}
?>Os resultados das busca no DrumonModel por padrão são arrays associadas, pórem se passar o segundo argumento como true ele retorna um objeto da classe.
<?php
$post_model = new Post();
$post = $post_model->find(10);
echo $post['id']; // => 10
$post = $post_model->find(10, true);
echo $post->id; // => 10
?><?php
$post_model = new Post();
// Encontra o post com a chave primaria = 10
$post = $post_model->find(10); // sql => SELECT * FROM `posts` WHERE (posts.id = 10)
// Encontra o post com as chaves primarias = 9 e 10
$post = $post_model->find(array(9,10)); // sql => SELECT * FROM `posts` WHERE (posts.id IN (9,10))
// Encontra o primeiro post
$post = $post_model->first(); // sql => SELECT * FROM `posts` ORDER BY posts.id ASC LIMIT 1
// Encontra o último post
$post = $post_model->last(); // sql => SELECT * FROM `posts` ORDER BY posts.id DESC LIMIT 1
// Encontra um registro
$post = $post_model->one(); // sql => SELECT * FROM `posts` LIMIT 1
// Encontra todos os registros
$post = $post_model->all(); // sql => SELECT * FROM `posts`
?><?php
$post_model = new Post();
// Where simples
$posts = $post_model->where(array('author' => 'danillo'))->all();
# => SELECT * FROM `posts` WHERE (author = "danillo")
// Where com IN
$posts = $post_model->where(array('id' => array(1,2,3)))->all();
# => SELECT * FROM `posts` WHERE (id IN (1,2,3))
// Where string
$posts = $post_model->where('category = "internet"')->all();
# => sql => SELECT * FROM `posts` WHERE (category = "internet")
// Pega os posts com mais de 10 comentários da categoria internet (1)
$posts = $post_model->where('comments_count > 10 AND category = "internet"')->all();
# => sql => SELECT * FROM `posts` WHERE (comments_count > 10 AND category = "internet")
// Pega os posts com mais de 10 comentários da categoria internet (2)
$posts = $post_model->where('comments_count > ? AND categoty = ?',array(10, 'internet'))->all();
# => sql => SELECT * FROM `posts` WHERE (comments_count > 10 AND category = `internet`)
// Pega os posts com mais de 10 comentários da categoria internet (3)
$posts = $post_model->where('comments_count > ?',array(10))->where('categoty = ?',array('internet'))->all();
# => sql => SELECT * FROM `posts` WHERE (comments > 10) AND (category = 'internet')
// Pega os posts com mais de 10 comentários da categoria internet (4)
$posts = $post_model->where('comments_count > ?',array(10));
$posts = $posts->where('categoty = ?',array('internet'))->all();
# => sql => SELECT * FROM `posts` WHERE (comments > 10) AND (category = 'internet')
?><?php
$post_model = new Post();
// Ordena pela data de criação
$posts = $post_model->order('created_at DESC')->all(); // SQL => SELECT * FROM `posts` ORDER BY created_at DESC
?><?php
$post_model = new Post();
// Seleciona id e title de todos os registros
$posts = $post_model->select('id, title')->all(); // SQL => SELECT id, title FROM `posts`
?><?php
$post_model = new Post();
// Pega os 10 primeiros posts
$posts = $post_model->limit(10)->all(); // SQL => SELECT * FROM `posts` LIMIT 10
// Pega os 10 posts após os 5 primeiros posts encontrados.
$posts = $post_model->limit(10)->offset(20)->all(); // SQL => SELECT * FROM `posts` LIMIT 10 OFFSET 20
?><?php
$post_model = new Post();
// Agrupa os posts por data de criação
$posts = $post_model->group('date(created_at)')->order('created_at')->all(); // SQL => SELECT * FROM posts GROUP BY date(created_at) ORDER BY created_at
?><?php
$post_model = new Post();
// Agrupa os posts por data de criação
$posts = $post_model->group('date(created_at)')->having('category = ?',array('internet'))->all(); // SQL => SELECT * FROM posts GROUP BY date(created_at) HAVING categoty = 'internet'
?><?php
$post_model = new Post();
$posts_with_user = $post_model->join('INNER JOIN users ON users.id = posts.user_id')->all();
// é mesmo que
$join_array = $post_model->join(array('user'))->all();
// SQL => SELECT * FROM `posts` INNER JOIN `users` ON `users`.id = `posts`.user_id
?>Existem alguns métodos utilizados para fazer calculos, todos eles são compativeis com a interface de query.
- count
- average
- minimum
- maximum
- sum
<?php
$post_model = new Post();
// Quantidade de posts no banco de dados
$posts_total = $post_model->count(); // SQL => SELECT count(*) FROM `posts`
// Quantidade de posts da categoria internet
$internet_total = $post_model->where('category = ',array('internet'))count(); // SQL => SELECT count(*) FROM `posts` WHERE (category = 'internet')
?><?php
$post_model = new Post();
// Quantidade de posts no banco de dados
$posts = $post_model->find_by_sql('SELECT * FROM posts');
?><?php
$post_model = new Post();
// Quantidade de posts no banco de dados
$posts = $post_model->where('title LIKE ?',array('%carro%'))->to_sql();
echo $posts; // => SELECT * FROM `posts` WHERE title LIKE '%carro%';
?>