CodeIgniter Datamapper – Selecionando objetos que não tenham determinados relacionamentos

Faz tempo que trabalho com Code Igniter e gosto muito do Datamapper (leia mais sobre este ORM aqui). Hoje surgiu uma necessidade nova em um projeto e achei interessante o suficiente para compartilhar aqui. Em uma relação many to manycomo selecionar objetos que não tenham um relacionamento específico?

Por exemplo, tenho os models product e category, com relacionamento de muitos para muitos nos dois casos (um produto pode ter várias categorias e uma categoria pode ter vários produtos).

Como selecionar produtos que não estejam na categoria canecas, por exemplo?

A resposta curta é: subqueries.

// query para pegar todos os produtos que tem categoria "canecas"
$sub_products = new Product();
$sub_products->select('id')->where_related_category('name', 'canecas');
// Agora usando subqueries, pega todos que não estão na categoria
$products = new Product();
$products->where_not_in_subquery('id', $sub_products)->get();

E se você precisa selecionar por exemplo todos os produtos que não estão relacionados com nenhuma categoria é só fazer um select que atenda na sua subquery, como por exemplo:

$sub_products->select('id')->where_related_category('id > 0');

Tem uma solução diferente? Deixa aí nos comentários!

Como limpar o cache do WordPress por linha de comando

Estou trabalhando em alguns projeto utilizando o WordPress como CMS e em situações específicas eu precisava limpar o cache de todo o site. Não sou fã da plataforma, acho que a performance deixa muito a desejar, mas não posso negar que ela é cheia de facilidades.

Sei que posso fazer apagar o cache por dentro do wp-admin, mas no ambiente de desenvolvimento ou se meu “trigger” para a limpeza de cache é externo, um caminho muito fácil é apagar fisicamente todos os arquivos de cache do WordPress.

Os arquivos de cache ficam em wp-content/cache e podem ter extensões .html, .gz e também .meta. Então com um simples find na linha de comando (unix) você consegue limpar o cache do WordPress com a linha abaixo:

find /var/www/wordpress.gssolutions.com.br/public/wp-content/cache/ \( -name '*.html' -or -name '*.html.gz' -or -name '*.meta' \) -delete

Lembre-se de substituir o caminho (/var/www/wordpress.gssolutions.com.br/public) pelo caminho da instalação do WP no seu servidor.

Tem uma solução melhor para lidar com estas situações? Deixe nos comentários 🙂