O CakePHP é um framework para desenvolvimento rápido de aplicações em PHP. Baseado no Ruby on Rails, segue o paradigma da convenção sobre configuração. Usa design patterns como MVC e ORM, reduz os custos de desenvolvimento e ajuda os desenvolvedores a escreverem menos código.
Apesar de ser um bom framework e ser baseado no Rails, a principal diferença que faz o Rails mais vantajoso (fora o nível da comunidade ruby ser maior que o nível da comunidade php) é a própria sintaxe do Ruby em relação ao PHP. Eu particularmente recomendo fortemente o desenvolvimento em PHP utilizando o CakePHP, mas na minha opinião nada supera o Rails.
Abaixo segue um exemplo de uma consulta (inner join) entre dois modelos (Agencia e Cidade que possuem um relacionamento has_and_belongs_to_many) para uma consulta em que devem ser listadas as cidades (distintamente) que possuem relacionamento com agências ordenadas pelo nome:
O SQL esperado
SELECT cidades.id, cidades.nome FROM `cidades` INNER JOIN agencias_cidades ON (`agencias_cidades`.`cidade_id` = `cidades`.`id`) GROUP BY `cidades`.`id` ORDER BY `cidades`.`nome` ASC
Um possível exemplo no CakePHP (no controller agencias)
function index() { $cidades = $this->Agencia->Cidade->find('all', array( 'recursive' => 0, 'fields' => array('Cidade.id, Cidade.nome'), 'joins' => array(array( 'table' => 'agencias_cidades', 'type' => 'INNER', 'conditions' => array('agencias_cidades.cidade_id = Cidade.id') )), 'order' => array('Cidade.nome'), 'group' => array('Cidade.id') )); $this->set('cidades', $cidades); }
Um possível exemplo no Ruby on Rails (no controller agencias)
def index @cidades = Cidade.all :select => "cidades.id, cidades.nome", :joins => "INNER JOIN agencias_cidades ON (`agencias_cidades`.`cidade_id` = `cidades`.`id`)", : order => "cidades.nome", :group => "cidades.id" end
Esse é um exemplo bem simples, porém fica nítido a simplicidade do código, mesmo sem levar em consideração que no Rails bastaria uma linha em cada modelo para definir o relacionamento, enquanto que no Cake seria necessário mais linhas.
Concerteza Rails é bem mais completo, graças a comunidade e também a linguagem pela qual é baseada, a sixtaxe do ruby é mais clara que a do php,isso deixa os codigos no rails mais compreensiveis, tambem considero o Cake um grande framework e trabalharia com ele caso precisasse usar php, mas sou muito mais feliz porque posso usar o Rails ^^.
Boa rapaz, foi muito bem citado.
Cakephp é tão bom quanto o Rails, porem, a comunidade do Rails é bem mais ativa e sua linguagem bem simples.
Mas se for desenvolver algo em Cakephp, pode ir com confiança, conheço aplicações de alta escala que utiliza o cakephp.
Usando o cakephp corretamente, você consegue fazer qualquer coisa.
Renan,
eu desenvolvo em CakePHP também e não tenho maiores problemas, esse post é só para demonstrar como eu gosto do Rails heheheh =]
Disculpando mi español, el ejemplo podría ser también escrito como:
def index
@cidades = Cidade.all :select => “id,nome”,
:joins => :agencia_cidades,
: order => “cidades.nome”,
:group => “cidades.id”
end
:)
Alvaro,
eu tentei da forma que você sugeriu, mas não funcionou:
ActiveRecord::ConfigurationError
Association named ‘agencia_cidades’ was not found; perhaps you misspelled it?
Dentro de cidades você precisa ter
has_many :agencia_cidades #, :dependent => :destroy
Pronto a associação está criada.
Rodrigo,
é “elegante” do ponto de vista de programação, definir 2 associações (has_many e has_and_belongs_to_many)?
Muito legal seu post.
Também sou desenvolvedor cakePHP e Rails.
Só não concordo com “(fora o nível da comunidade ruby ser maior que o nível da comunidade php)”, porem respeito sua opnião.
Conheço muita gente boa de PHP e de Ruby e gente ruim das duas comunidades.
Sem criar flames mas, ficou meio tendencioso para o lado do Rails, kkk
Novamente post muito bom.
O find do cakephp para gerar a consulta solicitada pode ser bem mais reduzido, desde que o model seja bem construído.
Mesmo trabalhando com relacionamento has_and_belongs_to_many eu nunca precisei usar a opção “join” do cakephp.
Muito bom post.
Desenvolvo em CakePhp, estou pensando em começar a estudar ruby para passar para o rails futuramente.
Sempre usei o cakephp e dizem que é o mais próximo do ruby on rails.
As poucas pessoas que conheco que programam em ruby no framework rails falam que é a melhor coisa do mundo, melhor que php, c# e vbscript.
Bem é o que eu ouço, nunca programei em ruby então nao sei como é.
vamo ve como q vai ser neeh!! xD