SlideShare uma empresa Scribd logo
NotORMAutor:   Tiago DaviE-mail:  tiago.asp.net@gmail.comBlog:     http://tiagodavi.blogspot.com/Twitter: http://twitter.com/#!/tiagoaspnet
IntroduçãoO NotORM é uma biblioteca escrita em PHP para trabalhar com dados simples no banco de dados.Sua principal característica é a facilidade para trabalhar com tabelas relacionadas superando até mesmo o conhecido ORM Doctrine devido a sua simplicidade e performance.NotORM foi criado por JakubVránae o mesmo define a biblioteca como sendo tão simples quanto SimpleXML.É importante enfatizar que o NotORM é mais voltado para projetos pequenos onde se deseja ter uma boa performance associada a rapidez na entrega.Portanto decidir entre NotORM ou Doctrine vai depender do seu projeto.
InstalaçãoO NotORM pode ser baixado em http://www.notorm.com/Requerimentos:- PHP 5.1 +- Extensão PDO Pode se conectar com qualquer banco de dados suportado pela extensão- MySQL, SQLite, PostgreSQL, MS SQL, Oracle...
Olá NotORMDescompacte o arquivo baixado em seu servidor local vertrigo, wamp, xampetc  ou mesmo em seu servidor online. Vamos utilizar neste curso o banco de dados MySQL portanto crie um novo banco chamado notorm. Por padrão o NotORM está configurado para aceitar tabelas no singular com chaves primárias sendo id e chaves estrangeiras sendo tabela_id.Isso pode ser alterado ser tiver necessidade.Nos próximos slides temos o SQL das tabelas que vamos utilizar neste banco...

Recomendado para você

Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP

O documento apresenta um resumo sobre coleta de dados na web (web crawling e scraping) utilizando PHP. Aborda definições, principais pontos como robots.txt e headers, além de apresentar pseudocódigos para listagem de páginas e extração de detalhes, com armazenamento em banco de dados MySQL.

crawlingphpscraping
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece

A criação de uma loja virtual não é uma tarefa realizada apenas por desenvolvedores experientes e com um currículo extenso. Michael, que desenvolve, junto com o UOL, pacotes e soluções para a plataforma de pagamento digital PagSeguro vai mostrar isso ao vivo e a cores. Palestra gratuita: E-commerce: mais fácil do que parece Dia 12 de junho, das 10h às 13h Local: Faculdade Impacta

ecommercephpboleto
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017

Twig é uma linguagem de template para PHP que permite separar a lógica da apresentação. Ela oferece recursos como loops, condicionais, herança de templates, macros e filtros para formatação de dados. Sua sintaxe limpa e expressiva facilita a manutenção e legibilidade do código da view.

twig php php7 cursotemplatephp
Tabela «  grupo »CREATE TABLE `grupo` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `nome` varchar(250) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Tabela «  usuario »CREATE TABLE `usuario` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `grupo_id` int(11) NOT NULL,  `nome` varchar(250) NOT NULL,  `email` varchar(250) NOT NULL,  `senha` varchar(32) NOT NULL,  PRIMARY KEY (`id`),  KEY `FK_usuario` (`grupo_id`),  CONSTRAINT `FK_usuario` FOREIGN KEY (`grupo_id`) REFERENCES `grupo` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Tabela «  noticia »CREATE TABLE `noticia` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `usuario_id` int(11) NOT NULL,  `titulo` varchar(250) NOT NULL,  `conteudo` text NOT NULL,  `dt_criacao` date NOT NULL,  PRIMARY KEY (`id`),  KEY `FK_noticia` (`usuario_id`),  CONSTRAINT `FK_noticia` FOREIGN KEY (`usuario_id`) REFERENCES `usuario` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Banco « notorm »Esta é a representação gráfica do nosso banco:

Recomendado para você

Aula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQLAula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQL

O documento discute funções do PHP relacionadas a strings e arrays. Na seção de strings, explica funções como strlen, strpos, str_replace, trim e outras. Na seção de arrays, explica como imprimir, adicionar, remover e ordenar elementos de arrays, e funções como count, array_map e array_search.

PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL

O documento discute os principais frameworks PHP, comparando suas características e funcionalidades. Apresenta detalhes sobre arquitetura, acesso a dados, formulários, validações, cache, segurança, internacionalização e documentação de frameworks como CakePHP, CodeIgniter, Symfony e Zend Framework.

frameworks php cake code igniter symfony zend fare
LabMM4 (T14 - 12/13) - Arrays
LabMM4 (T14 - 12/13) - ArraysLabMM4 (T14 - 12/13) - Arrays
LabMM4 (T14 - 12/13) - Arrays

Um array é uma estrutura de dados que permite agrupar itens relacionados, onde cada item é identificado por uma chave e possui um valor. Arrays podem ter chaves numéricas ou associativas e serem unidimensionais ou multidimensionais. Existem vários métodos para adicionar, remover e acessar valores em arrays.

labmm4_ntc
Index.phpCrie um arquivo chamado index.php na pasta public_html.Seu servidor deve estar organizado da seguinte forma:public_html/	NotORM/		NotORM		tests		NotORM.php		readme.txt	index.php A pasta public_html pode ser sua pasta www ou qualquer outra que tenha configurado localmente.
Conexão PDOEscreva o código abaixo no seu arquivo index.php:<?phpinclude 'NotORM/NotORM.php';$pdo = new PDO('mysql:dbname=notorm;host=127.0.0.1', 'root', 123);$db   = new NotORM($pdo);O que estamos fazendo neste código?1º  Incluímos a biblioteca do NotORM2º  Instanciamos a extensão PDO e nos conectamos ao banco MySQL3º Instanciamos o NotORM e passamos como argumento a conexão PDO
InsertAgora que configuramos nosso arquivo vamos aprender como fazer inserts.Escreva o código abaixo no seu arquivo index.php, logo abaixo da sua conexão:<?php$array_grupo = array(	'nome' => 'Administradores');$id = $db->grupo()	->insert($array_grupo);	echo $id;
Entendendo o insert1º Criamos um array cujos índices têm os mesmos nomes dos campos na tabela    grupo2º Preenchemos esse array com valores 3º Utilizamos o objeto NotORM em $db para chamar através da seta nossa tabela4º Agora a tabela se comporta como um método e podemos encadear outro    método chamado insert e passar os argumentos para serem inseridos5º Mandamos imprimir a chave primária que acabou de ser inserida

Recomendado para você

PHP Community Summit - Do REST ao GraphQL com PHP
PHP Community Summit - Do REST ao GraphQL com PHPPHP Community Summit - Do REST ao GraphQL com PHP
PHP Community Summit - Do REST ao GraphQL com PHP

O documento apresenta GraphQL como uma alternativa ao REST para desenvolvimento de APIs com PHP. Resume a história, especificação e linguagem do GraphQL e demonstra como modelar um schema, queries e mutações para uma aplicação de notícias usando o framework GraphQL para PHP.

phpphpdfphpsp
Do REST ao GraphQL com PHP
Do REST ao GraphQL com PHPDo REST ao GraphQL com PHP
Do REST ao GraphQL com PHP

Apresentação ministrada no Darkmira Tour PHP 2017, no dia 26/05/2017. Aberto para a comunidade em 2015, o GraphQL surgiu como uma alternativa poderosa, eficiente e bem documentada para construção de API’s. Foi desenvolvida e utilizada pelo Facebook por mais de 3 anos antes de sua publicação. Nessa conversa abordaremos os fundamentos da especificação, as principais diferenças com o REST e como desenvolver uma API GraphQL utilizando PHP.

facebookrelayapi
Tw Course Ajax 2007 Ap05
Tw Course Ajax 2007 Ap05Tw Course Ajax 2007 Ap05
Tw Course Ajax 2007 Ap05

1) O documento descreve o framework JavaScript Ext JS, apresentando seus principais componentes como grids, diálogos e layouts. 2) É detalhada a implementação desses componentes através de classes como Ext.grid.Grid para grids, Ext.BasicDialog para diálogos e Ext.LayoutManager para layouts. 3) São apresentadas classes auxiliares como Ext.data.Store para armazenamento de dados e Ext.grid.ColumnModel para definição de colunas em grids.

Entendendo o InsertNa verdade o insert não retorna a chave primária mas sim um objeto com o último registro que acabou de ser inserido.Então como ele imprime a chave primária?O notORM utiliza o método mágico __toString() que imprime a chave se utilizarmos um construtor de linguagem como o echo.Vamos alterar nosso código para pegar qualquer informação do último insert.Acompanhe...
Entendendo o Insert$grupo = $db->grupo()	      ->insert($array_grupo);	echo $grupo['nome'];echo $grupo['id'];Agora podemos perceber que ele imprime tanto o id quanto o nome do grupo que acabamos de inserir.Dê um truncate no seu banco e vamos acompanhar uma das mágicas do NotORM.Vamos alterar novamente nosso código, agora para inserir usuários para um grupo.Acompanhe nos próximos slides...
Entendendo o Insert$array_grupo = array(	'nome' => 'Administradores');$grupo = $db->grupo()	       ->insert($array_grupo);			$array_usuario = array(	'nome'  => 'Fulano', 	'email' => 'fulano@gmail.com', 	'senha' => 123);	$grupo->usuario()           ->insert($array_usuario);
Entendendo o InsertQuando fazemos isso:$grupo->usuario()           ->insert($array_usuario); Estamos dizendo que esse usuário será inserido para esse grupo e o relacionamento é criado automaticamente!Confira sua tabela usuario e perceba que o campo grupo_id foi preenchido automaticamente com o id do grupo que foi criado.Vamos agora inserir também uma notícia para o usuário.Dê um truncate no seu banco e acrescente este código...

Recomendado para você

Introdução a python módulo a
Introdução a python   módulo aIntrodução a python   módulo a
Introdução a python módulo a

Este documento discute: 1. Josué Labaki apresenta um método para resumir documentos em poucas frases; 2. O método consiste em identificar as informações principais do texto e expressá-las de forma concisa em no máximo 3 frases.

Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simples

O documento resume as orientações do método Object Calisthenics para escrever códigos simples e de alta qualidade. As orientações incluem: 1) usar apenas um nível de identação por método; 2) evitar usar a palavra-chave "else"; 3) encapsular tipos primitivos se tiverem comportamento.

object-oriented programmingphpjava
Aula 3 - Java Prof.ª Cristiane Fidelix
Aula 3 -  Java Prof.ª Cristiane FidelixAula 3 -  Java Prof.ª Cristiane Fidelix
Aula 3 - Java Prof.ª Cristiane Fidelix

O documento discute conceitos de programação orientada a objetos em Java, incluindo encapsulamento, herança e polimorfismo. O encapsulamento restringe o acesso aos dados de uma classe através de métodos getters e setters. A herança permite que subclasses herdem atributos e métodos de superclasses. O polimorfismo permite que objetos se comportem de maneiras diferentes ao receberem a mesma mensagem.

Entendendo o Insert$usuario = $grupo->usuario()		 ->insert($array_usuario);		 date_default_timezone_set('America/Sao_Paulo');	$array_noticia = array(	'titulo' => 'Teste',	'conteudo' => 'Testando Conteúdo',	'dt_criacao' => new NotORM_Literal('NOW()'));		  	 $usuario->noticia()	->insert($array_noticia);
Entendendo o InsertA função date_default_timezone_set define o nosso timezone padrão e evita problemas no PHP 5.3O objeto NotORM_Literal('NOW()') retorna a data/hora atual.Quando fazemos isso:$usuario->noticia()	->insert($array_noticia);Estamos dizendo que essa notícia será inserida para esse usuário e o relacionamento também foi criado automaticamente!Confira sua tabela usuario e perceba que ele pertence a um grupo e que a noticia  criada pertence a esse usuário, o campo dt_criacao exibe a data de cadastro da notícia.
FindAgora vamos entender como consultar dados, observe este código:$usuario = $db->usuario[1];echo $usuario['nome'];O que este código faz é umSELECT * FROM usuario WHERE id = 1Pode não ser interessante executar um * FROM quando só precisamos por exemplo do endereço de e-mail deste usuário, então podemos executar de outra forma e ganhar em performance, observe:$usuario = $db->usuario('id = ?', 1)	         ->select('email')	         ->fetch();echo $usuario['email']; Este código seria o mesmo que SELECT email FROM usuario WHERE id = 1
FindNo método select podemos passar os campos da tabela desta forma:$usuario = $db->usuario('id = ?', 1)	          ->select('nome, email, senha')	          ->fetch();echo $usuario['nome'];echo $usuario['email'];echo $usuario['senha'];Vamos inserir mais alguns usuários para exemplificar melhor nossas consultas...

Recomendado para você

Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung IICampus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung II

Vorlesung im Studiengang Sport-, Event- und Medienmanagement am Campus M21 in München // Medienpraxis III: Online / Social Media (Vorlesung II) #educationinthemaking

kommunikationcampus m21social media
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...

Découvrez les bonnes pratiques, conseils et astuces concernant le développement, l'administration et l'architecture de Microsoft SQL Server 2008 et des versions antérieures ! Cette présentation est conçue aussi bien pour les administrateurs de base de données ou développeurs de Microsoft SQL Server que pour les DBAs occassionnels.

microsoft sql serverdbastéphane haby
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc Quixadá

O documento descreve as etapas para criar um sistema de contatos simples utilizando Java e banco de dados MySQL. Inicialmente, ele explica como criar o banco de dados e tabela no MySQL. Em seguida, apresenta classes como Conector para conexão com o banco, Contato para o modelo de dados e ContatoDAO para realizar operações no banco. Por fim, aborda o uso de JSP e JSTL para a camada de visualização.

javasistemasinformação
Find $grupo = $db->grupo('id = ?', 1)	       ->select('id')	      ->fetch();for($i=0;$i<5; $i++){	$grupo->usuario()	           ->insert( 		   array(			'nome'  => 'Usuario'.$i,			'email'  => 'usuario'.$i.'@gmail.com',			'senha' => '123'		)	);}
Find Inserimos 5 usuários com grupo_id  = 1 e agora vamos fazer uma consulta com eles:$usuarios = $db->usuario();foreach($usuarios as $u){     echo $u['nome'].' - '.$u['email'].'<br />';} No exemplo acima fizemos SELECT * FROM usuario e temos acesso a todos os campos.Vamos ver um exemplo mais completo...
Find Podemos encadear vários métodos para personalizar nossasconsultas:$usuarios = $db->usuario()	           ->select('nome, email')	           ->where('nome LIKE ?', 'Usuario%')	           ->order('nome DESC')	           ->limit(3);			   foreach($usuarios as $u){     echo $u['nome'].' - '.$u['email'].'<br />';}
Find Limpe seu banco de dados e vamos inserir  2 grupos e 2 usuários para cada grupo:$grupo1 = $db->grupo()	        ->insert(array('nome' => 'Grupo 1'));$grupo2 = $db->grupo()	        ->insert(array('nome' => 'Grupo 2'));$grupo1->usuario()	->insert(array('nome' => 'Eduardo', 'email' => 'teste', 'senha' => 'teste'));$grupo2->usuario()	->insert(array('nome' => 'Felipe',  'email' => 'teste', 'senha' => 'teste'));Agora vamos fazer uma consulta a estes usuários...

Recomendado para você

Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013

Vorlesung im Studiengang Sport-, Event- und Medienmanagement am Campus M21 in München im Modul "Angewandte Medien – Medienpraxis II: Online". Skript vom 11.02.2013.

instagram youtubelehrevibe
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & ShipmanDominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Tutorialphpmyadmin
TutorialphpmyadminTutorialphpmyadmin
Tutorialphpmyadmin

Este documento ensina como criar um banco de dados, tabelas e inserir e exibir dados usando PHP e MySQL. Ele explica como usar o phpMyAdmin para criar um banco de dados e tabelas, e como escrever código PHP para conectar ao banco de dados, inserir dados em uma tabela de um formulário HTML, e exibir esses dados.

phptutorial phpphpmyadmin
Find $usuarios = $db->usuario()	           ->select('id, grupo_id, nome, email')			   	          ->order('nome DESC');		   foreach($usuarios as $u){     echo $u->grupo['nome'].'<br />';     echo $u['nome'].'<br />';}Através do $u->grupo['nome']  o NotORM pega o nome do grupo de cada usuário!Perceba também que a query que ele faz não é um simples join mas sim uma consulta mais rápida:SELECT * FROM grupo WHERE (grupo.id IN (2, 1))Observe quetrazemos a chaveestrangeiragrupo_idparaqueissosejapossível: ->select('id, grupo_id, nome, email')
Find Vamos pegar um desses usuários :$usuario = $db->usuario(array('nome' => 'Eduardo', 'email' => ‘teste'))	         ->select('id')	        ->fetch();Este código é o mesmo que:SELECT id FROM usuario WHERE nome = 'Eduardo' AND email = 'teste‘Vamosinserirduasnotíciasparaele:$hoje = newNotORM_Literal('NOW()');$noticia1 = array('titulo' => 'Teste1', 'conteudo' => 'Teste1', 'dt_criacao' => $hoje);$noticia2 = array('titulo' => 'Teste2', 'conteudo' => 'Teste2', 'dt_criacao' => $hoje);$usuario->noticia()	->insert($noticia1, $noticia2);Observe que podemos inserir dois ou mais arrays de uma só vez!
Find Agora vamos consultar uma notícia:$noticias = $db->noticia()	         ->limit(1);foreach($noticias as $n){echo $n['titulo'].'<br />';echo $n->usuario['nome'].'<br />';echo $n->usuario->grupo['nome'].'<br />';}Através da notícia podemos pegar o usuário e seu grupo!Poderíamos pegar mais níveis de relacionamento caso existissem.
Left Join O NotORM também permite que se faça Left Joins observe:$autores = $db->noticia()	         ->select('usuario.id, usuario.nome')	         ->group('usuario.id');		   foreach($autores as $a){   echo $a['nome'].'<br />';}Esta sintaxe usuario.id e usuario.nome faz um leftjoin automático na tabela usuario.Perceba também que ele permite funções de agregação e que estamos agrupando  pelo id do usuário e assim trazemos todos os autores de notícias sem redundância.Poderíamos também pegar mais níveis caso existissem:(“tabela1.tabela2.campo")

Recomendado para você

Otimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - TchelinuxOtimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - Tchelinux

O documento apresenta uma palestra sobre otimização de aplicações com o framework Zend. Resume os principais pontos abordados: 1) Introdução ao palestrante e seus trabalhos com PHP; 2) Conceitos de avaliação e análise de desempenho; 3) Demonstração de testes de desempenho em aplicação simples utilizando diferentes técnicas de cache e escalonamento com Gearman.

otimizaçãozend framework
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013

Vorlesung im Studiengang Sport-, Event- und Medienmanagement am Campus M21 in München im Modul "Angewandte Medien – Medienpraxis II: Online". Skript vom 31. Januar 2013.

lehrecampus m21bildung
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
bestandsdatenalfresco
FetchPairsO método fetchPairs permite trazer os dados em pares de arrays associativos:$noticias = $db->noticia()	         ->fetchPairs('id', 'titulo');print_r($noticias); Assim ele vai associar para cada índice id o seu respectivo título de notícia.Ele também permite passar apenas um argumento:$noticias = $db->noticia()	          ->fetchPairs('id');Dessa forma ele percorre toda a tabela e utiliza como índice o id ou qualquer outro campo que seja definido como argumento.
AgregaçãoO NotORM permite utilizar métodos de agregação:$tabela->count('*')$tabela->count('DISTINCT '.$campo)$tabela->min($campo)$tabela->max($campo)$tabela->aggregation("GROUP_CONCAT({$campo})")$usuario = $db->usuario[1];echo $usuario['nome'].'<br />';echo 'Total de notícias: '.$usuario->noticia()->count('*');O código acima pega o total de notícias do usuário 1
UpdatePodemos atualizar facilmente os dados desta forma:$usuario = $db->usuario[1];echo $usuario['nome'].'<br />';$usuario['nome'] = 'Jonas';$usuario->update();$usuario = $db->usuario[1];echo $usuario['nome'].'<br />';Observe que pegamos o usuário 1 que se chamava Eduardo, trocamos o nome dele para Jonas,  atualizamos e pegamos novamente para verificar a alteração.Poderíamos atualizar diretamente assim:$db->usuario('id = ?', 2)      ->update(array('nome' => 'Mauricio', 'email' => 'mauricio@gmail.com')); Aqui trocamos o nome e o email onde o id = 2
UpdateNeste exemplo estamos pegando o usuário 1 e fazendo uma referência, dessa forma ao invés de copiar; a variável $usuario vai apontar para o mesmo objeto criado pelo fetch e assim economizar memória.$usuario =& $db->usuario()	           ->select('id')                         ->where('id = ?', 1)	           ->fetch();echo $usuario['id'];Aqui vamos trocar o nome de todos os usuários do grupo 1 através do próprio grupo:$grupo =& $db->grupo[1];$grupo->usuario()            ->update(array('nome' => 'Fernando'));SELECT * FROM grupo WHERE (id = 1) UPDATE usuario SET nome = 'Fernando' WHERE (grupo_id = '1')

Recomendado para você

Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHP

O documento apresenta um resumo de uma palestra sobre a ligação de uma aplicação Flex a um backend PHP usando AMFPHP. A palestra aborda os principais tópicos: 1) métodos de comunicação entre o frontend e backend; 2) explicação detalhada do Flash Remoting; 3) implementações open-source de Flash Remoting incluindo AMFPHP. A apresentação inclui um exemplo prático de como utilizar o AMFPHP para criar e recuperar dados de uma base de dados MySQL numa aplicação Flex.

phpflexlamp
02.10.2011 SC B.A.T II
02.10.2011   SC B.A.T II02.10.2011   SC B.A.T II
02.10.2011 SC B.A.T II

Vereinsheflte vom Heimspiel gegen den SC B.A.T II

Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?

Document de resum de l'acció del Govern d'Esquerres a la Generalitat de Catalunya

joan sauraesquerresicv
DeletePara excluir dados é muito simples, vamos excluir o usuário 2:$usuario =& $db->usuario[2];$usuario->delete();Agora vamos excluir a notícia 1:$db->noticia('id = ?', 1)      ->delete(); Portanto caso esteja com o objeto em mãos simplesmente chame o método delete e caso não esteja mande excluir diretamente como no exemplo acima pois não há necessidade de fazer uma consulta para efetuar uma exclusão, nosso exemplo foi apenas didático e o mesmo vale para o update.
DebugPodemos criar uma função de callback para debugar querys observe:$db->debug = 'debug';$db->noticia('id = ?', 2)      ->select('titulo')      ->fetch();	 	function debug($query, $params){     echo $query.'<br />';print_r($params);} A função de callback recebe a query e um array com os argumentos que foram passados:SELECT titulo FROM noticia WHERE (id = ?)Array ( [0] => 2 )
CacheNotORM permite a utilização de cache de várias formas veja:Usar a session $_SESSION["NotORM"] : new NotORM_Cache_SessionCache em disco: new NotORM_Cache_File($arquivo)Incluirarquivo de cache em disco (paraaceleradores de PHP): new NotORM_Cache_Include($arquivo)Com tabela no banco de dados: new NotORM_Cache_Database(PDO $connection)Para Memcache(prefixoMemcache) : new NotORM_Cache_Memcache(Memcache $memcache)Para APC (prefixo APC): new NotORM_Cache_APCO objeto de cache é passadocomo 3º argumento no construtor do NotORM.
FIMPara saber mais consulte a documentação oficial do NotORMhttp://www.notorm.com/#apiAssista NotORM vs Doctrine 2http://www.notorm.com/static/doctrine2-notorm/Participe do grupo no linkedinhttp://www.linkedin.com/groups/NotORM-3941155?gid=3941155 Obrigado.

Recomendado para você

Atelier agile 2009_09_27
Atelier agile 2009_09_27Atelier agile 2009_09_27
Atelier agile 2009_09_27
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
Présentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@tPrésentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@t

Présentation du Framework LMAX chez So@t par Cédric Finance et François OSTYN

disruptorso@tlmax

Mais conteúdo relacionado

Mais procurados

(A13) LabMM3 - JavaScript - Arrays multidimensionais
(A13) LabMM3 - JavaScript - Arrays multidimensionais(A13) LabMM3 - JavaScript - Arrays multidimensionais
(A13) LabMM3 - JavaScript - Arrays multidimensionais
Carlos Santos
 
Php 04 Mysql
Php 04 MysqlPhp 04 Mysql
Php 04 Mysql
Regis Magalhães
 
Computação Científica com Python, Numpy e Scipy
Computação Científica com Python, Numpy e ScipyComputação Científica com Python, Numpy e Scipy
Computação Científica com Python, Numpy e Scipy
Marcel Caraciolo
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP
Luis Gustavo Almeida
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
Michael Castillo Granados
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
Luis Gustavo Almeida
 
Aula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQLAula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQL
B&R Consultoria Empresarial
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
Marcio Albuquerque
 
LabMM4 (T14 - 12/13) - Arrays
LabMM4 (T14 - 12/13) - ArraysLabMM4 (T14 - 12/13) - Arrays
LabMM4 (T14 - 12/13) - Arrays
Carlos Santos
 
PHP Community Summit - Do REST ao GraphQL com PHP
PHP Community Summit - Do REST ao GraphQL com PHPPHP Community Summit - Do REST ao GraphQL com PHP
PHP Community Summit - Do REST ao GraphQL com PHP
Bruno Neves Menezes
 
Do REST ao GraphQL com PHP
Do REST ao GraphQL com PHPDo REST ao GraphQL com PHP
Do REST ao GraphQL com PHP
Bruno Neves Menezes
 
Tw Course Ajax 2007 Ap05
Tw Course Ajax 2007 Ap05Tw Course Ajax 2007 Ap05
Tw Course Ajax 2007 Ap05
Milfont Consulting
 
Introdução a python módulo a
Introdução a python   módulo aIntrodução a python   módulo a
Introdução a python módulo a
Jader Gabriel
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simples
Otávio Calaça Xavier
 
Aula 3 - Java Prof.ª Cristiane Fidelix
Aula 3 -  Java Prof.ª Cristiane FidelixAula 3 -  Java Prof.ª Cristiane Fidelix
Aula 3 - Java Prof.ª Cristiane Fidelix
Cris Fidelix
 

Mais procurados (15)

(A13) LabMM3 - JavaScript - Arrays multidimensionais
(A13) LabMM3 - JavaScript - Arrays multidimensionais(A13) LabMM3 - JavaScript - Arrays multidimensionais
(A13) LabMM3 - JavaScript - Arrays multidimensionais
 
Php 04 Mysql
Php 04 MysqlPhp 04 Mysql
Php 04 Mysql
 
Computação Científica com Python, Numpy e Scipy
Computação Científica com Python, Numpy e ScipyComputação Científica com Python, Numpy e Scipy
Computação Científica com Python, Numpy e Scipy
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
Aula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQLAula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQL
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
LabMM4 (T14 - 12/13) - Arrays
LabMM4 (T14 - 12/13) - ArraysLabMM4 (T14 - 12/13) - Arrays
LabMM4 (T14 - 12/13) - Arrays
 
PHP Community Summit - Do REST ao GraphQL com PHP
PHP Community Summit - Do REST ao GraphQL com PHPPHP Community Summit - Do REST ao GraphQL com PHP
PHP Community Summit - Do REST ao GraphQL com PHP
 
Do REST ao GraphQL com PHP
Do REST ao GraphQL com PHPDo REST ao GraphQL com PHP
Do REST ao GraphQL com PHP
 
Tw Course Ajax 2007 Ap05
Tw Course Ajax 2007 Ap05Tw Course Ajax 2007 Ap05
Tw Course Ajax 2007 Ap05
 
Introdução a python módulo a
Introdução a python   módulo aIntrodução a python   módulo a
Introdução a python módulo a
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simples
 
Aula 3 - Java Prof.ª Cristiane Fidelix
Aula 3 -  Java Prof.ª Cristiane FidelixAula 3 -  Java Prof.ª Cristiane Fidelix
Aula 3 - Java Prof.ª Cristiane Fidelix
 

Destaque

Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung IICampus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
Daniel Rehn
 
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
dbi services
 
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc Quixadá
Zarathon Maia
 
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Daniel Rehn
 
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & ShipmanDominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
jonesshipman
 
Tutorialphpmyadmin
TutorialphpmyadminTutorialphpmyadmin
Tutorialphpmyadmin
marcossonotec
 
Otimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - TchelinuxOtimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - Tchelinux
Elton Minetto
 
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Daniel Rehn
 
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
dmc digital media center GmbH
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHP
elliando dias
 
02.10.2011 SC B.A.T II
02.10.2011   SC B.A.T II02.10.2011   SC B.A.T II
02.10.2011 SC B.A.T II
HerdwangerSV
 
Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?
iniciativaverds
 
Atelier agile 2009_09_27
Atelier agile 2009_09_27Atelier agile 2009_09_27
Atelier agile 2009_09_27
domidp
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
MongoDB
 
Présentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@tPrésentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@t
Francois Ostyn
 
MySQL Query Optimization
MySQL Query OptimizationMySQL Query Optimization
MySQL Query Optimization
Bianca Caruso da Paixão
 
Lean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanbanLean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanban
Julien Fallet
 
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013
Daniel Rehn
 
Digitale Mentalität II
Digitale Mentalität IIDigitale Mentalität II

Destaque (20)

Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung IICampus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
 
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
 
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc Quixadá
 
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
 
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & ShipmanDominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
 
Tutorialphpmyadmin
TutorialphpmyadminTutorialphpmyadmin
Tutorialphpmyadmin
 
Otimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - TchelinuxOtimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - Tchelinux
 
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
 
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHP
 
02.10.2011 SC B.A.T II
02.10.2011   SC B.A.T II02.10.2011   SC B.A.T II
02.10.2011 SC B.A.T II
 
Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?
 
Atelier agile 2009_09_27
Atelier agile 2009_09_27Atelier agile 2009_09_27
Atelier agile 2009_09_27
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
 
Présentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@tPrésentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@t
 
MySQL Query Optimization
MySQL Query OptimizationMySQL Query Optimization
MySQL Query Optimization
 
Einführung in SCRUM
Einführung in SCRUMEinführung in SCRUM
Einführung in SCRUM
 
Lean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanbanLean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanban
 
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 30.01.2013
 
Digitale Mentalität II
Digitale Mentalität IIDigitale Mentalität II
Digitale Mentalität II
 

Semelhante a NotORM

Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidade
metzen
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
Rodrigo Hjort
 
Php 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies CabecalhosPhp 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies Cabecalhos
Regis Magalhães
 
Php 07 Cakephp
Php 07 CakephpPhp 07 Cakephp
Php 07 Cakephp
Regis Magalhães
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
Adler Medrado
 
Apostila PhP com Wamp 3a Parte
Apostila PhP com Wamp 3a ParteApostila PhP com Wamp 3a Parte
Apostila PhP com Wamp 3a Parte
Ilton Barbosa
 
Mini Curso de Python para Coding Dojo
Mini Curso de Python para Coding DojoMini Curso de Python para Coding Dojo
Mini Curso de Python para Coding Dojo
Fabricio NErdmann
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - Tabelas
Dalton Martins
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
Impacta Eventos
 
Php 08 Oo
Php 08 OoPhp 08 Oo
Php 08 Oo
Regis Magalhães
 
MYSQL - TLBDII
MYSQL - TLBDIIMYSQL - TLBDII
Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8
Emiliano Barbosa
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
Edemilson Gonçalves
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
Michael Castillo Granados
 
Python 02
Python 02Python 02
Python 02
Bruno Catão
 
Aula 8 php
Aula 8 phpAula 8 php
Aula 8 php
sergio_henrique
 
Palestra MongoDB
Palestra MongoDBPalestra MongoDB
Palestra MongoDB
James G Silva
 
MongoDB
MongoDBMongoDB
ORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernateORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernate
Juliano Oliveira
 
Da argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguroDa argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguro
Michael Castillo Granados
 

Semelhante a NotORM (20)

Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidade
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Php 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies CabecalhosPhp 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies Cabecalhos
 
Php 07 Cakephp
Php 07 CakephpPhp 07 Cakephp
Php 07 Cakephp
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Apostila PhP com Wamp 3a Parte
Apostila PhP com Wamp 3a ParteApostila PhP com Wamp 3a Parte
Apostila PhP com Wamp 3a Parte
 
Mini Curso de Python para Coding Dojo
Mini Curso de Python para Coding DojoMini Curso de Python para Coding Dojo
Mini Curso de Python para Coding Dojo
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - Tabelas
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Php 08 Oo
Php 08 OoPhp 08 Oo
Php 08 Oo
 
MYSQL - TLBDII
MYSQL - TLBDIIMYSQL - TLBDII
MYSQL - TLBDII
 
Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
 
Python 02
Python 02Python 02
Python 02
 
Aula 8 php
Aula 8 phpAula 8 php
Aula 8 php
 
Palestra MongoDB
Palestra MongoDBPalestra MongoDB
Palestra MongoDB
 
MongoDB
MongoDBMongoDB
MongoDB
 
ORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernateORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernate
 
Da argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguroDa argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguro
 

NotORM

  • 1. NotORMAutor: Tiago DaviE-mail: tiago.asp.net@gmail.comBlog: http://tiagodavi.blogspot.com/Twitter: http://twitter.com/#!/tiagoaspnet
  • 2. IntroduçãoO NotORM é uma biblioteca escrita em PHP para trabalhar com dados simples no banco de dados.Sua principal característica é a facilidade para trabalhar com tabelas relacionadas superando até mesmo o conhecido ORM Doctrine devido a sua simplicidade e performance.NotORM foi criado por JakubVránae o mesmo define a biblioteca como sendo tão simples quanto SimpleXML.É importante enfatizar que o NotORM é mais voltado para projetos pequenos onde se deseja ter uma boa performance associada a rapidez na entrega.Portanto decidir entre NotORM ou Doctrine vai depender do seu projeto.
  • 3. InstalaçãoO NotORM pode ser baixado em http://www.notorm.com/Requerimentos:- PHP 5.1 +- Extensão PDO Pode se conectar com qualquer banco de dados suportado pela extensão- MySQL, SQLite, PostgreSQL, MS SQL, Oracle...
  • 4. Olá NotORMDescompacte o arquivo baixado em seu servidor local vertrigo, wamp, xampetc ou mesmo em seu servidor online. Vamos utilizar neste curso o banco de dados MySQL portanto crie um novo banco chamado notorm. Por padrão o NotORM está configurado para aceitar tabelas no singular com chaves primárias sendo id e chaves estrangeiras sendo tabela_id.Isso pode ser alterado ser tiver necessidade.Nos próximos slides temos o SQL das tabelas que vamos utilizar neste banco...
  • 5. Tabela «  grupo »CREATE TABLE `grupo` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(250) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  • 6. Tabela «  usuario »CREATE TABLE `usuario` ( `id` int(11) NOT NULL AUTO_INCREMENT, `grupo_id` int(11) NOT NULL, `nome` varchar(250) NOT NULL, `email` varchar(250) NOT NULL, `senha` varchar(32) NOT NULL, PRIMARY KEY (`id`), KEY `FK_usuario` (`grupo_id`), CONSTRAINT `FK_usuario` FOREIGN KEY (`grupo_id`) REFERENCES `grupo` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  • 7. Tabela «  noticia »CREATE TABLE `noticia` ( `id` int(11) NOT NULL AUTO_INCREMENT, `usuario_id` int(11) NOT NULL, `titulo` varchar(250) NOT NULL, `conteudo` text NOT NULL, `dt_criacao` date NOT NULL, PRIMARY KEY (`id`), KEY `FK_noticia` (`usuario_id`), CONSTRAINT `FK_noticia` FOREIGN KEY (`usuario_id`) REFERENCES `usuario` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  • 8. Banco « notorm »Esta é a representação gráfica do nosso banco:
  • 9. Index.phpCrie um arquivo chamado index.php na pasta public_html.Seu servidor deve estar organizado da seguinte forma:public_html/ NotORM/ NotORM tests NotORM.php readme.txt index.php A pasta public_html pode ser sua pasta www ou qualquer outra que tenha configurado localmente.
  • 10. Conexão PDOEscreva o código abaixo no seu arquivo index.php:<?phpinclude 'NotORM/NotORM.php';$pdo = new PDO('mysql:dbname=notorm;host=127.0.0.1', 'root', 123);$db = new NotORM($pdo);O que estamos fazendo neste código?1º Incluímos a biblioteca do NotORM2º Instanciamos a extensão PDO e nos conectamos ao banco MySQL3º Instanciamos o NotORM e passamos como argumento a conexão PDO
  • 11. InsertAgora que configuramos nosso arquivo vamos aprender como fazer inserts.Escreva o código abaixo no seu arquivo index.php, logo abaixo da sua conexão:<?php$array_grupo = array( 'nome' => 'Administradores');$id = $db->grupo() ->insert($array_grupo); echo $id;
  • 12. Entendendo o insert1º Criamos um array cujos índices têm os mesmos nomes dos campos na tabela grupo2º Preenchemos esse array com valores 3º Utilizamos o objeto NotORM em $db para chamar através da seta nossa tabela4º Agora a tabela se comporta como um método e podemos encadear outro método chamado insert e passar os argumentos para serem inseridos5º Mandamos imprimir a chave primária que acabou de ser inserida
  • 13. Entendendo o InsertNa verdade o insert não retorna a chave primária mas sim um objeto com o último registro que acabou de ser inserido.Então como ele imprime a chave primária?O notORM utiliza o método mágico __toString() que imprime a chave se utilizarmos um construtor de linguagem como o echo.Vamos alterar nosso código para pegar qualquer informação do último insert.Acompanhe...
  • 14. Entendendo o Insert$grupo = $db->grupo() ->insert($array_grupo); echo $grupo['nome'];echo $grupo['id'];Agora podemos perceber que ele imprime tanto o id quanto o nome do grupo que acabamos de inserir.Dê um truncate no seu banco e vamos acompanhar uma das mágicas do NotORM.Vamos alterar novamente nosso código, agora para inserir usuários para um grupo.Acompanhe nos próximos slides...
  • 15. Entendendo o Insert$array_grupo = array( 'nome' => 'Administradores');$grupo = $db->grupo() ->insert($array_grupo); $array_usuario = array( 'nome' => 'Fulano', 'email' => 'fulano@gmail.com', 'senha' => 123); $grupo->usuario() ->insert($array_usuario);
  • 16. Entendendo o InsertQuando fazemos isso:$grupo->usuario() ->insert($array_usuario); Estamos dizendo que esse usuário será inserido para esse grupo e o relacionamento é criado automaticamente!Confira sua tabela usuario e perceba que o campo grupo_id foi preenchido automaticamente com o id do grupo que foi criado.Vamos agora inserir também uma notícia para o usuário.Dê um truncate no seu banco e acrescente este código...
  • 17. Entendendo o Insert$usuario = $grupo->usuario() ->insert($array_usuario); date_default_timezone_set('America/Sao_Paulo'); $array_noticia = array( 'titulo' => 'Teste', 'conteudo' => 'Testando Conteúdo', 'dt_criacao' => new NotORM_Literal('NOW()')); $usuario->noticia() ->insert($array_noticia);
  • 18. Entendendo o InsertA função date_default_timezone_set define o nosso timezone padrão e evita problemas no PHP 5.3O objeto NotORM_Literal('NOW()') retorna a data/hora atual.Quando fazemos isso:$usuario->noticia() ->insert($array_noticia);Estamos dizendo que essa notícia será inserida para esse usuário e o relacionamento também foi criado automaticamente!Confira sua tabela usuario e perceba que ele pertence a um grupo e que a noticia criada pertence a esse usuário, o campo dt_criacao exibe a data de cadastro da notícia.
  • 19. FindAgora vamos entender como consultar dados, observe este código:$usuario = $db->usuario[1];echo $usuario['nome'];O que este código faz é umSELECT * FROM usuario WHERE id = 1Pode não ser interessante executar um * FROM quando só precisamos por exemplo do endereço de e-mail deste usuário, então podemos executar de outra forma e ganhar em performance, observe:$usuario = $db->usuario('id = ?', 1) ->select('email') ->fetch();echo $usuario['email']; Este código seria o mesmo que SELECT email FROM usuario WHERE id = 1
  • 20. FindNo método select podemos passar os campos da tabela desta forma:$usuario = $db->usuario('id = ?', 1) ->select('nome, email, senha') ->fetch();echo $usuario['nome'];echo $usuario['email'];echo $usuario['senha'];Vamos inserir mais alguns usuários para exemplificar melhor nossas consultas...
  • 21. Find $grupo = $db->grupo('id = ?', 1) ->select('id') ->fetch();for($i=0;$i<5; $i++){ $grupo->usuario() ->insert( array( 'nome' => 'Usuario'.$i, 'email' => 'usuario'.$i.'@gmail.com', 'senha' => '123' ) );}
  • 22. Find Inserimos 5 usuários com grupo_id = 1 e agora vamos fazer uma consulta com eles:$usuarios = $db->usuario();foreach($usuarios as $u){ echo $u['nome'].' - '.$u['email'].'<br />';} No exemplo acima fizemos SELECT * FROM usuario e temos acesso a todos os campos.Vamos ver um exemplo mais completo...
  • 23. Find Podemos encadear vários métodos para personalizar nossasconsultas:$usuarios = $db->usuario() ->select('nome, email') ->where('nome LIKE ?', 'Usuario%') ->order('nome DESC') ->limit(3); foreach($usuarios as $u){ echo $u['nome'].' - '.$u['email'].'<br />';}
  • 24. Find Limpe seu banco de dados e vamos inserir 2 grupos e 2 usuários para cada grupo:$grupo1 = $db->grupo() ->insert(array('nome' => 'Grupo 1'));$grupo2 = $db->grupo() ->insert(array('nome' => 'Grupo 2'));$grupo1->usuario() ->insert(array('nome' => 'Eduardo', 'email' => 'teste', 'senha' => 'teste'));$grupo2->usuario() ->insert(array('nome' => 'Felipe', 'email' => 'teste', 'senha' => 'teste'));Agora vamos fazer uma consulta a estes usuários...
  • 25. Find $usuarios = $db->usuario() ->select('id, grupo_id, nome, email') ->order('nome DESC'); foreach($usuarios as $u){ echo $u->grupo['nome'].'<br />'; echo $u['nome'].'<br />';}Através do $u->grupo['nome'] o NotORM pega o nome do grupo de cada usuário!Perceba também que a query que ele faz não é um simples join mas sim uma consulta mais rápida:SELECT * FROM grupo WHERE (grupo.id IN (2, 1))Observe quetrazemos a chaveestrangeiragrupo_idparaqueissosejapossível: ->select('id, grupo_id, nome, email')
  • 26. Find Vamos pegar um desses usuários :$usuario = $db->usuario(array('nome' => 'Eduardo', 'email' => ‘teste')) ->select('id') ->fetch();Este código é o mesmo que:SELECT id FROM usuario WHERE nome = 'Eduardo' AND email = 'teste‘Vamosinserirduasnotíciasparaele:$hoje = newNotORM_Literal('NOW()');$noticia1 = array('titulo' => 'Teste1', 'conteudo' => 'Teste1', 'dt_criacao' => $hoje);$noticia2 = array('titulo' => 'Teste2', 'conteudo' => 'Teste2', 'dt_criacao' => $hoje);$usuario->noticia() ->insert($noticia1, $noticia2);Observe que podemos inserir dois ou mais arrays de uma só vez!
  • 27. Find Agora vamos consultar uma notícia:$noticias = $db->noticia() ->limit(1);foreach($noticias as $n){echo $n['titulo'].'<br />';echo $n->usuario['nome'].'<br />';echo $n->usuario->grupo['nome'].'<br />';}Através da notícia podemos pegar o usuário e seu grupo!Poderíamos pegar mais níveis de relacionamento caso existissem.
  • 28. Left Join O NotORM também permite que se faça Left Joins observe:$autores = $db->noticia() ->select('usuario.id, usuario.nome') ->group('usuario.id'); foreach($autores as $a){ echo $a['nome'].'<br />';}Esta sintaxe usuario.id e usuario.nome faz um leftjoin automático na tabela usuario.Perceba também que ele permite funções de agregação e que estamos agrupando pelo id do usuário e assim trazemos todos os autores de notícias sem redundância.Poderíamos também pegar mais níveis caso existissem:(“tabela1.tabela2.campo")
  • 29. FetchPairsO método fetchPairs permite trazer os dados em pares de arrays associativos:$noticias = $db->noticia() ->fetchPairs('id', 'titulo');print_r($noticias); Assim ele vai associar para cada índice id o seu respectivo título de notícia.Ele também permite passar apenas um argumento:$noticias = $db->noticia() ->fetchPairs('id');Dessa forma ele percorre toda a tabela e utiliza como índice o id ou qualquer outro campo que seja definido como argumento.
  • 30. AgregaçãoO NotORM permite utilizar métodos de agregação:$tabela->count('*')$tabela->count('DISTINCT '.$campo)$tabela->min($campo)$tabela->max($campo)$tabela->aggregation("GROUP_CONCAT({$campo})")$usuario = $db->usuario[1];echo $usuario['nome'].'<br />';echo 'Total de notícias: '.$usuario->noticia()->count('*');O código acima pega o total de notícias do usuário 1
  • 31. UpdatePodemos atualizar facilmente os dados desta forma:$usuario = $db->usuario[1];echo $usuario['nome'].'<br />';$usuario['nome'] = 'Jonas';$usuario->update();$usuario = $db->usuario[1];echo $usuario['nome'].'<br />';Observe que pegamos o usuário 1 que se chamava Eduardo, trocamos o nome dele para Jonas, atualizamos e pegamos novamente para verificar a alteração.Poderíamos atualizar diretamente assim:$db->usuario('id = ?', 2) ->update(array('nome' => 'Mauricio', 'email' => 'mauricio@gmail.com')); Aqui trocamos o nome e o email onde o id = 2
  • 32. UpdateNeste exemplo estamos pegando o usuário 1 e fazendo uma referência, dessa forma ao invés de copiar; a variável $usuario vai apontar para o mesmo objeto criado pelo fetch e assim economizar memória.$usuario =& $db->usuario() ->select('id') ->where('id = ?', 1) ->fetch();echo $usuario['id'];Aqui vamos trocar o nome de todos os usuários do grupo 1 através do próprio grupo:$grupo =& $db->grupo[1];$grupo->usuario() ->update(array('nome' => 'Fernando'));SELECT * FROM grupo WHERE (id = 1) UPDATE usuario SET nome = 'Fernando' WHERE (grupo_id = '1')
  • 33. DeletePara excluir dados é muito simples, vamos excluir o usuário 2:$usuario =& $db->usuario[2];$usuario->delete();Agora vamos excluir a notícia 1:$db->noticia('id = ?', 1) ->delete(); Portanto caso esteja com o objeto em mãos simplesmente chame o método delete e caso não esteja mande excluir diretamente como no exemplo acima pois não há necessidade de fazer uma consulta para efetuar uma exclusão, nosso exemplo foi apenas didático e o mesmo vale para o update.
  • 34. DebugPodemos criar uma função de callback para debugar querys observe:$db->debug = 'debug';$db->noticia('id = ?', 2) ->select('titulo') ->fetch(); function debug($query, $params){ echo $query.'<br />';print_r($params);} A função de callback recebe a query e um array com os argumentos que foram passados:SELECT titulo FROM noticia WHERE (id = ?)Array ( [0] => 2 )
  • 35. CacheNotORM permite a utilização de cache de várias formas veja:Usar a session $_SESSION["NotORM"] : new NotORM_Cache_SessionCache em disco: new NotORM_Cache_File($arquivo)Incluirarquivo de cache em disco (paraaceleradores de PHP): new NotORM_Cache_Include($arquivo)Com tabela no banco de dados: new NotORM_Cache_Database(PDO $connection)Para Memcache(prefixoMemcache) : new NotORM_Cache_Memcache(Memcache $memcache)Para APC (prefixo APC): new NotORM_Cache_APCO objeto de cache é passadocomo 3º argumento no construtor do NotORM.
  • 36. FIMPara saber mais consulte a documentação oficial do NotORMhttp://www.notorm.com/#apiAssista NotORM vs Doctrine 2http://www.notorm.com/static/doctrine2-notorm/Participe do grupo no linkedinhttp://www.linkedin.com/groups/NotORM-3941155?gid=3941155 Obrigado.