SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
Versão .02
3
1
Quem sou eu
Desenvolvedor Web há 11 anos
11 anos com PHP
6 anos com JavaScript
Casado há 3 anos
Amante de Vôlei e Churrasco :)
2 . 1
Quem sou eu
2 . 2
O que é Propel?
3 . 1
O.R.M.
?
3 . 2
ORM Object-relational mapping
(Mapeamento objeto-relacional)
É uma técnica de desenvolvimento utilizada para
reduzir a impedância da programação orientada aos
objetos utilizando bancos de dados relacionais. As
tabelas do banco de dados são representadas através de
classes e os registros de cada tabela são representados
como instâncias das classes correspondentes.
Com esta técnica, o programador não precisa se
preocupar com os comandos em linguagem SQL; ele irá
usar uma interface de programação simples que faz todo
o trabalho de persistência.
- , WikiPédia
https://pt.wikipedia.org/wiki/Mapeamento_objeto-relacional
3 . 3
O que é EXATAMENTE?
É um ORM de Código Aberto que permite acesso ao
banco de dados através de um set de objetos, provendo
assim uma API simplificada para armazenamento e
requisição de dados.
O que o difere de APENAS um ORM é que nativamente
provê Query-builder, Migrations, Engenharia reversa
de um banco já existente e um Gerador de model.
3 . 4
Um pouco de Teoria
O Propel 1 nasceu no início dos anos 2000(o primeiro
commit no Git foi em 2005)
O projeto do Propel nasceu baseado no Torque, uma
ferramenta que saiu do Apache Turbine.
Basicamente desde a versão 1 o propel implementa o
Pattern Active Record até metade da versão 2 onde
foram feito experimentos com Data Mapper.
A versão 3, criada em março de 2017, ainda em beta,
implementa tanto Active Record e Data Mapper.
3 . 5
Um pouco de Teoria
Um pouco controverso no ponto principal. Onde toda a
relação do banco é escrita via arquivos XML.
Todo o banco é escrito no XML, através de Ferramentas
CLI, é feito o processo de migration e Geração do Código
para as entidades.
Na versão 3, estão sendo feitos experimentos com
Annotations.
3 . 6
Do que é composto
XML
Para o esquema
do banco de
dados.
PHP 5.5+
Base de TUDO.
Symfony(Components)
Console
Yaml
Finder
Validator
Filesystem
4
Legal!!!
Mas... Por que eu deveria usa Propel, se já possuo
recursos em meu framework?
5 . 1
O Propel dá de presente para você, o Desenvolvedor
Web, ferramentas para trabalhar com bancos de dados
da mesma maneira que você trabalha com outras
classes e objetos em PHP sem escrever SQL.
Simples!
É super rápido(mesmo)
Se você usa IDE, ela te agradercerá por isso.
Tem um console muito phodástico.
Outros motivos que podem influenciar...
É bem documentado.
De brinde, existem comportamentos(behaviors)
Não é um casamento
5 . 2
Instalação/Configuração
$ composer require propel/propel:~2.0@dev
$ vendor/bin/propel init
$ vendor/bin/propel config:convert
$ vendor/bin/propel model:build
$ vendor/bin/propel migration:diff
$ vendor/bin/propel migration:migrate
6 . 1
Instalação/Configuração
6 . 2
Como utilizar?
Basicamente escrever(ou gerar) um
XML com a representação do banco.
<?xml version="1.0" encoding="UTF-8"?>
<database name="bookstore" defaultIdMethod="native">
<table name="book" phpName="Book">
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
<column name="title" type="varchar" size="255" required="true" />
<column name="isbn" type="varchar" size="24" required="true" phpName="ISBN"/>
<column name="author_id" type="integer" required="true"/>
<foreign-key foreignTable="author">
<reference local="author_id" foreign="id"/>
</foreign-key>
</table>
<table name="author" phpName="Author">
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
<column name="first_name" type="varchar" size="128" required="true"/>
<column name="last_name" type="varchar" size="128" required="true"/>
</table>
</database>
6 . 3
<?php
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/generated-conf/config.php';
$author = new DatabaseAuthor();
$author->setFirstName('Rafael');
$author->setLastName('DoGueto');
$author->save();
$q = new DatabaseAuthorQuery();
$primeiro = $q->findPK(1);
print_r($primeiro);
Como utilizar?
6 . 4
OK XML feito, como é o fucking código?
<?php
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/generated-conf/config.php';
$book = new Book();
$book->setTitle('Piadas Prontas');
$book->setIsbn('1234566654321');
$author = new Author();
$author->setFirstName('Rafael');
$author->setLastName('Nery');
$book->setAuthor($author);
$book->save();
print_r($book->toArray());
$q = new AuthorQuery();
$primeiro = $q->findPK(1);
print_r($primeiro);
Ainda existe Sandbox ;) - 6 . 5
C.R.U.D.
<?php
/* Incializar autoload, Propel, etc. */
$author = new Author();
$author->setFirstName('Rafael');
$author->setLastName('Nery');
$author->save();
Internamente será executado
INSERT INTO author (first_name, last_name) VALUES ('Rafael', 'Nery');
7 . 1
C.R.U.D.
<?php
/* Incializar autoload, Propel, etc. */
$q = new DatabaseAuthorQuery();
$primeiro = $q->findPK(1);
Internamente será executado
SELECT author.id, author.first_name, author.last_name
FROM `author`
WHERE author.id = 1
LIMIT 1;
7 . 2
C.R.U.D.
<?php
/* Incializar autoload, Propel, etc. */
use PropelRuntimePropel;
use PropelRuntimeFormatterObjectFormatter;
$con = Propel::getWriteConnection(MapBookTableMap::DATABASE_NAME);
$sql = "SELECT * FROM book WHERE id NOT IN "
."(SELECT book_review.book_id FROM book_review"
." INNER JOIN author ON (book_review.author_id=author.ID)"
." WHERE author.last_name = :name)";
$stmt = $con->prepare($sql);
$stmt->execute(array(':name' => 'Rafael'));
$formatter = new ObjectFormatter();
$formatter->setClass('Book'); //Com namespace
$books = $formatter->format($con->getDataFetcher($stmt));
Queryzinha marota na mão grande =)
7 . 3
C.R.U.D.
<?php
// primeira vez
$author1 = AuthorQuery::create()->findPk(1);
// SELECT query...
...
// segunda vez
$author2 = AuthorQuery::create()->findPk(1);
// Não roda a query e trás o objeto do author1
Queryzinha marota na mão grande =)
7 . 4
C.R.U.D.
<?php
$author = AuthorQuery::create()->findOneByFirstName('Rafael');
$author->setLastName('Nery');
$author->save();
// O Update pode ser feito na coleção
AuthorQuery::create()
->filterByFirstName('Rafael')
->update(array('LastName' => 'Nery'));
7 . 5
C.R.U.D.
<?php
$author = AuthorQuery::create()->findOneByFirstName('Rafael');
$author->delete();
//ou use na coleção
AuthorQuery::create()
->filterByFirstName('Rafael')
->delete();
7 . 6
Transações
<?php
use PropelRuntimePropel;
// ...
public function tranferenciaBancaria($fromAccountNumber, $toAccountNumber, $amount)
{
/// basta chamar a PDO
$con = Propel::getWriteConnection(AccountTableMap::DATABASE_NAME);
$fromAccount = AccountQuery::create()->findPk($fromAccountNumber, $con);
$toAccount = AccountQuery::create()->findPk($toAccountNumber, $con);
$con->beginTransaction();
try {
$fromAccount->setValue($fromAccount->getValue() - $amount);
$fromAccount->save($con);
$toAccount->setValue($toAccount->getValue() + $amount);
$toAccount->save($con);
$con->commit();
} catch (Exception $e) {
$con->rollback();
throw $e;
}
//:P
}
8 . 1
Transações
<?php
$con = Propel::getWriteConnection(
BookTableMap::DATABASE_NAME
);
for ($i=0; $i<2002; $i++)
{
$book = new Book();
$book->setTitle($i . ': A Space Odyssey');
$book->save($con);
}
BEGIN;
INSERT INTO book (`ID`,`TITLE`) VALUES (NULL,'0:
COMMIT;
BEGIN;
INSERT INTO book (`ID`,`TITLE`) VALUES (NULL,'1:
COMMIT;
BEGIN;
INSERT INTO book (`ID`,`TITLE`) VALUES (NULL,'2:
COMMIT;
...
<?php
$con = Propel::getWriteConnection(BookTableMap::DATABASE_NAME);
$con->beginTransaction();
for ($i=0; $i<2002; $i++)
{
$book = new Book();
$book->setTitle($i . ': A Space Odyssey');
$book->save($con);
}
$con->commit();
BEGIN;
INSERT INTO book (`ID`,`TITLE`) VALUES (NULL,'0:
INSERT INTO book (`ID`,`TITLE`) VALUES (NULL,'1:
INSERT INTO book (`ID`,`TITLE`) VALUES (NULL,'2:
...
COMMIT;
8 . 2
Callbacks
<table name="book">
...
<column name="data_criacao" type="timestamp" />
</table>
<?php
class Book extends BaseBook
{
public function preInsert(ConnectionInterface $con = null)
{
$this->setDataCriacao(time());
return true;
}
}
<?php
$b = new Book();
$b->setTitle('War And Peace');
$b->save();
echo $b->getDataCriacao(); // 1988-10-21 18:14:23
9
Slides: https://slides.com/rafaelnery
:wq
Perguntas?
10

Mais conteúdo relacionado

Mais procurados

Java recursos avançados - streams
Java   recursos avançados - streamsJava   recursos avançados - streams
Java recursos avançados - streamsArmando Daniel
 
Introducao ao Shell Script
Introducao ao Shell ScriptIntroducao ao Shell Script
Introducao ao Shell ScriptHugo Maia Vieira
 
Java recursos avançados - filters
Java   recursos avançados - filtersJava   recursos avançados - filters
Java recursos avançados - filtersArmando Daniel
 
Curso De Shell Aula 1
Curso De Shell   Aula 1Curso De Shell   Aula 1
Curso De Shell Aula 1Felipe Santos
 
ANTLR-ANother Tool for Language Recognition
ANTLR-ANother Tool for Language RecognitionANTLR-ANother Tool for Language Recognition
ANTLR-ANother Tool for Language Recognitionelliando dias
 
Gerando bindings de bibliotecas C++ para Python
Gerando bindings de bibliotecas C++ para PythonGerando bindings de bibliotecas C++ para Python
Gerando bindings de bibliotecas C++ para PythonMarcelo Lira
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoRafael Jaques
 
PHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e SessoesPHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e SessoesDaniel Brandão
 
Introdução ao php
Introdução ao phpIntrodução ao php
Introdução ao phpsecomp2011
 

Mais procurados (20)

Java recursos avançados - streams
Java   recursos avançados - streamsJava   recursos avançados - streams
Java recursos avançados - streams
 
Introducao ao Shell Script
Introducao ao Shell ScriptIntroducao ao Shell Script
Introducao ao Shell Script
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
PHP 7
PHP 7PHP 7
PHP 7
 
Django Módulo Básico Parte II
Django Módulo Básico Parte IIDjango Módulo Básico Parte II
Django Módulo Básico Parte II
 
Java recursos avançados - filters
Java   recursos avançados - filtersJava   recursos avançados - filters
Java recursos avançados - filters
 
Curso De Shell Aula 1
Curso De Shell   Aula 1Curso De Shell   Aula 1
Curso De Shell Aula 1
 
Fundamentos de Sockets
Fundamentos de SocketsFundamentos de Sockets
Fundamentos de Sockets
 
ANTLR-ANother Tool for Language Recognition
ANTLR-ANother Tool for Language RecognitionANTLR-ANother Tool for Language Recognition
ANTLR-ANother Tool for Language Recognition
 
Tutorial Shell Script
Tutorial Shell ScriptTutorial Shell Script
Tutorial Shell Script
 
Curso Gratuito de Shell Script
Curso Gratuito de Shell ScriptCurso Gratuito de Shell Script
Curso Gratuito de Shell Script
 
Apresentacao TCC - Rafael Felix
Apresentacao TCC - Rafael FelixApresentacao TCC - Rafael Felix
Apresentacao TCC - Rafael Felix
 
Stack based overflow
Stack based overflowStack based overflow
Stack based overflow
 
Gerando bindings de bibliotecas C++ para Python
Gerando bindings de bibliotecas C++ para PythonGerando bindings de bibliotecas C++ para Python
Gerando bindings de bibliotecas C++ para Python
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
 
Zope
ZopeZope
Zope
 
PHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e SessoesPHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e Sessoes
 
Dicas de java para iniciantes
Dicas de java para iniciantesDicas de java para iniciantes
Dicas de java para iniciantes
 
Introdução ao php
Introdução ao phpIntrodução ao php
Introdução ao php
 
Puppet 3 em 2017
Puppet 3 em 2017Puppet 3 em 2017
Puppet 3 em 2017
 

Semelhante a TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team at PHP.

Semelhante a TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team at PHP. (20)

Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Isc aula 7
Isc   aula 7Isc   aula 7
Isc aula 7
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
 
Palestra
PalestraPalestra
Palestra
 
Solisc2009 Migrando de Oracle para Postgresql
Solisc2009 Migrando de Oracle para PostgresqlSolisc2009 Migrando de Oracle para Postgresql
Solisc2009 Migrando de Oracle para Postgresql
 
Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Threads - .Net Framework 4.0
Threads - .Net Framework 4.0
 
Jpa, hibernate and jpql
Jpa, hibernate and jpqlJpa, hibernate and jpql
Jpa, hibernate and jpql
 
PDO: TRABALHANDO COM BANCO DO JEITO CERTO
PDO: TRABALHANDO COM BANCO DO JEITO CERTOPDO: TRABALHANDO COM BANCO DO JEITO CERTO
PDO: TRABALHANDO COM BANCO DO JEITO CERTO
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com Python
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com Python
 
Skytools, pgbouncer e plproxy
Skytools, pgbouncer e plproxySkytools, pgbouncer e plproxy
Skytools, pgbouncer e plproxy
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Doctrine for dummies
Doctrine for dummiesDoctrine for dummies
Doctrine for dummies
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
Ferramentas open-source
Ferramentas open-sourceFerramentas open-source
Ferramentas open-source
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
Apresentação faef
Apresentação faefApresentação faef
Apresentação faef
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl Workshop
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 

Mais de tdc-globalcode

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadetdc-globalcode
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...tdc-globalcode
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucessotdc-globalcode
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPAtdc-globalcode
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinotdc-globalcode
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...tdc-globalcode
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicestdc-globalcode
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publicatdc-globalcode
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#tdc-globalcode
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocustdc-globalcode
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?tdc-globalcode
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golangtdc-globalcode
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QAtdc-globalcode
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciatdc-globalcode
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Servicetdc-globalcode
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETtdc-globalcode
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8tdc-globalcode
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...tdc-globalcode
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#tdc-globalcode
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Coretdc-globalcode
 

Mais de tdc-globalcode (20)

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devices
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocus
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
 

Último

PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfHELENO FAVACHO
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Ilda Bicacro
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdfAna Lemos
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesFabianeMartins35
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfMarianaMoraesMathias
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfHELENO FAVACHO
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxferreirapriscilla84
 
Ficha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFicha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFtimaMoreira35
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfEmanuel Pio
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfCamillaBrito19
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESCOMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESEduardaReis50
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
Slides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxSlides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxMauricioOliveira258223
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresAnaCarinaKucharski1
 

Último (20)

PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdf
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
Bullying, sai pra lá
Bullying,  sai pra láBullying,  sai pra lá
Bullying, sai pra lá
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptx
 
Ficha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFicha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdf
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdf
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESCOMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
Slides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxSlides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptx
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
 

TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team at PHP.

  • 2. Quem sou eu Desenvolvedor Web há 11 anos 11 anos com PHP 6 anos com JavaScript Casado há 3 anos Amante de Vôlei e Churrasco :) 2 . 1
  • 4. O que é Propel? 3 . 1
  • 6. ORM Object-relational mapping (Mapeamento objeto-relacional) É uma técnica de desenvolvimento utilizada para reduzir a impedância da programação orientada aos objetos utilizando bancos de dados relacionais. As tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes. Com esta técnica, o programador não precisa se preocupar com os comandos em linguagem SQL; ele irá usar uma interface de programação simples que faz todo o trabalho de persistência. - , WikiPédia https://pt.wikipedia.org/wiki/Mapeamento_objeto-relacional 3 . 3
  • 7. O que é EXATAMENTE? É um ORM de Código Aberto que permite acesso ao banco de dados através de um set de objetos, provendo assim uma API simplificada para armazenamento e requisição de dados. O que o difere de APENAS um ORM é que nativamente provê Query-builder, Migrations, Engenharia reversa de um banco já existente e um Gerador de model. 3 . 4
  • 8. Um pouco de Teoria O Propel 1 nasceu no início dos anos 2000(o primeiro commit no Git foi em 2005) O projeto do Propel nasceu baseado no Torque, uma ferramenta que saiu do Apache Turbine. Basicamente desde a versão 1 o propel implementa o Pattern Active Record até metade da versão 2 onde foram feito experimentos com Data Mapper. A versão 3, criada em março de 2017, ainda em beta, implementa tanto Active Record e Data Mapper. 3 . 5
  • 9. Um pouco de Teoria Um pouco controverso no ponto principal. Onde toda a relação do banco é escrita via arquivos XML. Todo o banco é escrito no XML, através de Ferramentas CLI, é feito o processo de migration e Geração do Código para as entidades. Na versão 3, estão sendo feitos experimentos com Annotations. 3 . 6
  • 10. Do que é composto XML Para o esquema do banco de dados. PHP 5.5+ Base de TUDO. Symfony(Components) Console Yaml Finder Validator Filesystem 4
  • 11. Legal!!! Mas... Por que eu deveria usa Propel, se já possuo recursos em meu framework? 5 . 1
  • 12. O Propel dá de presente para você, o Desenvolvedor Web, ferramentas para trabalhar com bancos de dados da mesma maneira que você trabalha com outras classes e objetos em PHP sem escrever SQL. Simples! É super rápido(mesmo) Se você usa IDE, ela te agradercerá por isso. Tem um console muito phodástico. Outros motivos que podem influenciar... É bem documentado. De brinde, existem comportamentos(behaviors) Não é um casamento 5 . 2
  • 13. Instalação/Configuração $ composer require propel/propel:~2.0@dev $ vendor/bin/propel init $ vendor/bin/propel config:convert $ vendor/bin/propel model:build $ vendor/bin/propel migration:diff $ vendor/bin/propel migration:migrate 6 . 1
  • 15. Como utilizar? Basicamente escrever(ou gerar) um XML com a representação do banco. <?xml version="1.0" encoding="UTF-8"?> <database name="bookstore" defaultIdMethod="native"> <table name="book" phpName="Book"> <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/> <column name="title" type="varchar" size="255" required="true" /> <column name="isbn" type="varchar" size="24" required="true" phpName="ISBN"/> <column name="author_id" type="integer" required="true"/> <foreign-key foreignTable="author"> <reference local="author_id" foreign="id"/> </foreign-key> </table> <table name="author" phpName="Author"> <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/> <column name="first_name" type="varchar" size="128" required="true"/> <column name="last_name" type="varchar" size="128" required="true"/> </table> </database> 6 . 3
  • 16. <?php require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/generated-conf/config.php'; $author = new DatabaseAuthor(); $author->setFirstName('Rafael'); $author->setLastName('DoGueto'); $author->save(); $q = new DatabaseAuthorQuery(); $primeiro = $q->findPK(1); print_r($primeiro); Como utilizar? 6 . 4
  • 17. OK XML feito, como é o fucking código? <?php require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/generated-conf/config.php'; $book = new Book(); $book->setTitle('Piadas Prontas'); $book->setIsbn('1234566654321'); $author = new Author(); $author->setFirstName('Rafael'); $author->setLastName('Nery'); $book->setAuthor($author); $book->save(); print_r($book->toArray()); $q = new AuthorQuery(); $primeiro = $q->findPK(1); print_r($primeiro); Ainda existe Sandbox ;) - 6 . 5
  • 18. C.R.U.D. <?php /* Incializar autoload, Propel, etc. */ $author = new Author(); $author->setFirstName('Rafael'); $author->setLastName('Nery'); $author->save(); Internamente será executado INSERT INTO author (first_name, last_name) VALUES ('Rafael', 'Nery'); 7 . 1
  • 19. C.R.U.D. <?php /* Incializar autoload, Propel, etc. */ $q = new DatabaseAuthorQuery(); $primeiro = $q->findPK(1); Internamente será executado SELECT author.id, author.first_name, author.last_name FROM `author` WHERE author.id = 1 LIMIT 1; 7 . 2
  • 20. C.R.U.D. <?php /* Incializar autoload, Propel, etc. */ use PropelRuntimePropel; use PropelRuntimeFormatterObjectFormatter; $con = Propel::getWriteConnection(MapBookTableMap::DATABASE_NAME); $sql = "SELECT * FROM book WHERE id NOT IN " ."(SELECT book_review.book_id FROM book_review" ." INNER JOIN author ON (book_review.author_id=author.ID)" ." WHERE author.last_name = :name)"; $stmt = $con->prepare($sql); $stmt->execute(array(':name' => 'Rafael')); $formatter = new ObjectFormatter(); $formatter->setClass('Book'); //Com namespace $books = $formatter->format($con->getDataFetcher($stmt)); Queryzinha marota na mão grande =) 7 . 3
  • 21. C.R.U.D. <?php // primeira vez $author1 = AuthorQuery::create()->findPk(1); // SELECT query... ... // segunda vez $author2 = AuthorQuery::create()->findPk(1); // Não roda a query e trás o objeto do author1 Queryzinha marota na mão grande =) 7 . 4
  • 22. C.R.U.D. <?php $author = AuthorQuery::create()->findOneByFirstName('Rafael'); $author->setLastName('Nery'); $author->save(); // O Update pode ser feito na coleção AuthorQuery::create() ->filterByFirstName('Rafael') ->update(array('LastName' => 'Nery')); 7 . 5
  • 23. C.R.U.D. <?php $author = AuthorQuery::create()->findOneByFirstName('Rafael'); $author->delete(); //ou use na coleção AuthorQuery::create() ->filterByFirstName('Rafael') ->delete(); 7 . 6
  • 24. Transações <?php use PropelRuntimePropel; // ... public function tranferenciaBancaria($fromAccountNumber, $toAccountNumber, $amount) { /// basta chamar a PDO $con = Propel::getWriteConnection(AccountTableMap::DATABASE_NAME); $fromAccount = AccountQuery::create()->findPk($fromAccountNumber, $con); $toAccount = AccountQuery::create()->findPk($toAccountNumber, $con); $con->beginTransaction(); try { $fromAccount->setValue($fromAccount->getValue() - $amount); $fromAccount->save($con); $toAccount->setValue($toAccount->getValue() + $amount); $toAccount->save($con); $con->commit(); } catch (Exception $e) { $con->rollback(); throw $e; } //:P } 8 . 1
  • 25. Transações <?php $con = Propel::getWriteConnection( BookTableMap::DATABASE_NAME ); for ($i=0; $i<2002; $i++) { $book = new Book(); $book->setTitle($i . ': A Space Odyssey'); $book->save($con); } BEGIN; INSERT INTO book (`ID`,`TITLE`) VALUES (NULL,'0: COMMIT; BEGIN; INSERT INTO book (`ID`,`TITLE`) VALUES (NULL,'1: COMMIT; BEGIN; INSERT INTO book (`ID`,`TITLE`) VALUES (NULL,'2: COMMIT; ... <?php $con = Propel::getWriteConnection(BookTableMap::DATABASE_NAME); $con->beginTransaction(); for ($i=0; $i<2002; $i++) { $book = new Book(); $book->setTitle($i . ': A Space Odyssey'); $book->save($con); } $con->commit(); BEGIN; INSERT INTO book (`ID`,`TITLE`) VALUES (NULL,'0: INSERT INTO book (`ID`,`TITLE`) VALUES (NULL,'1: INSERT INTO book (`ID`,`TITLE`) VALUES (NULL,'2: ... COMMIT; 8 . 2
  • 26. Callbacks <table name="book"> ... <column name="data_criacao" type="timestamp" /> </table> <?php class Book extends BaseBook { public function preInsert(ConnectionInterface $con = null) { $this->setDataCriacao(time()); return true; } } <?php $b = new Book(); $b->setTitle('War And Peace'); $b->save(); echo $b->getDataCriacao(); // 1988-10-21 18:14:23 9