Eloquent, simplificando as Models no Laravel

Eloquent no Laravel

Eloquent no Laravel

Hoje retomo a série de Artigos sobre o Laravel trazendo o Eloquent, uma forma simples de trabalhar com consultas a bancos de dados e desenvolver suas Models.

No último artigo, abordei a criação das migrations e, como o Laravel pode relacionar as tabelas para você. Lembra do exemplo da tabela de produtos que eu criei? Então… Agora é hora de começar a buscar estes dados para a nossa aplicação. Para isto precisaremos criar Eloquent Models.

Models

As Models, dentro da arquitetura MVC, são classes responsáveis pela leitura, escrita e validação  de qualquer dado. Por isto, será aqui que iremos trabalhar com Eloquent para fazermos todo tipo de ações no nosso banco de dados. Mas, primeiro vamos entender o que é o Eloquent.

Eloquent no Laravel

O Eloquent nada mais é que um ORM que vem em conjunto com o Laravel. Mas, melhor que isso, ele possui uma estrutura bem simples para você realizar a implementação da sua lógica de controle com banco de dados.

Com base nos preceitos do ORM (Object relational mapping) Eloquent abstrai toda a complexidade da interação com os bancos de dados utilizando as Models para interagir com cada tabela.

Para facilitar o trabalho com ele existem algumas convenções como:

  • Os nomes de tabelas são padronizadas para o plural da classe que irá consumí-la.
  • As Primary keys são sempre vinculadas à uma coluna id.
  • Toda tabela possuirá colunas timestamp mostrando a data de criação (created_at) e data de atualização (updated_at).
  • Por padrão, as Models do Eloquent irão buscar as configurações de conexão com o banco de dados no arquivo padrão do Laravel, “config/database.php”.

Resumidamente falando, ele consegue trazer em uma ou duas linhas o que você gastaria muitas linhas de comando para executar.

Criando as Models com Eloquent

Saindo um pouco da teoria, vamos voltar ao nosso exemplo. Precisamos criar as Models que irão trabalhar com as tabelas “product_lines” e “products”. Para isto vou abrir o terminal da minha Hospedagem Cloud que possuo aqui na DialHost e digitar o seguinte comando:

 

Ao executar estes comandos vamos poder observar que as novas classes foi criada dentro da pasta app.

product_line.php

product.php

 

Para um sistema de consultas básico nem é necessário implementar funções dentro destas classes. Isto porque o próprio “Eloquent Model” já implementa diversas funções de consultas e manipulação de dados com o banco. Com a classe referenciada vou apenas chamar as funções do Eloquent diretamente através da Controller.

Principais Funções do Eloquent

Consultas

 

Para estas duas últimas funções, aconselho que sejam criadas funções dentro da Model que as executem. Assim, podemos abstrair a regra de consulta das Controllers. Esta forma é uma boa prática , principalmente se temos uma query complexa que exija muitos wheres e etc.

Você ainda pode utilizar de funções agregadoras como count, sum, avg, max, min.

 

Inserindo dados com Eloquent

Para inserir dados com o Eloquent existem 2 formas. Na primeira, você instancia a Model em uma variável, dentro da Controller, seta os atributos e então salva tudo no final.

 

Eu particularmente achei mais direta e limpa a forma a seguir. Ela é denomiada como Mass Assignment. Aqui eu chamo uma função estática que cria o registro passando os atributos como array

 

Para fazer a inserção desta segunda forma você precisa setar na sua Model os campos que serão permitidos serem setados. Por se tratar de uma inserção em massa o Laravel bloqueia todos os campos por padrão. Isto é para evitar que usuários consigam passar parâmetros indesejados na Request e que eles acabem alterando um dado importante dentro do banco de dados.

Então criarei na Model Product a variavel “fillable” e definirei um array com os campos que serão inseridos aqui.

Atualizando dados com Eloquent

A forma mais convencional de atualizar um dado através do Eloquent é semelhante a inserir um dado. A diferença é que já teremos a instância do produto especifico que iremos editar e então salvar o novo valor.

 

Removendo dados com Eloquent

Remover um dado com Eloquent é ainda mais fácil basta setarmos na função o comando delete() na instância que estamos trabalhando.

Conclusão

É claro que na vida real ainda teremos que fazer validações para deletar o registro apenas se ele realmente existir no banco. Ou durante uma edição verificar se o dado já existe antes de atualizá-lo e senão perguntar se o usuário deseja criar.

Apenas lendo por alto o Eloquent já  pensei em um novo post com algumas funções que não deu para explanar aqui. Se fosse a fundo nestas funções este artigo ficaria muito extenso e cansativo. então aguardem até o próximo post onde eu irei falar um pouco sobre funções específicas de busca, updates, criação e remoção de dados.

Felipe Moraes
Felipe Moraes

Desde pequeno eu adorei tecnologia e este sentimento me fez estudar e trabalhar com desenvolvimento, design de interfaces e interação. Esta vontade de melhorar e aprender com a tecnologia me fez estar aqui na DialHost desde 2012.

Desenvolvimento Laravel: Laravel 5.5 Chegou! Confira as novidades e como instalar.

Nova versão Laravel 5.5

Conheças as novidades e como instalar o novo Laravel 5.5

Iniciarei hoje uma série nova baseada em alguns estudos que estou fazendo sobre desenvolvimento Laravel. A ideia desta série e trazer novidades e aprofundar os conhecimentos sobre este Framework PHP que já tomou destaque junto ao mercado. Inicio hoje com a chegada do Laravel 5.5. Confesso até que ele foi um grande impulsionador para eu querer começar a série.

Bem, não poderia começar com um novo lançamento sem falar de suas novidades. Por isso, abaixo, deixarei as novidades que achei mais interessantes e depois utilizarei a minha plataforma de Hospedagem Cloud aqui da DialHost para realizar uma instalação limpa do Framework.

Tela Whoops

A tela de Whoops do Laravel é sem dúvida uma ajuda e tanto no momento que estamos desenvolvendo um novo projeto. Ela é o debugger do Framework que nos mostra quando algo não está certo com a nossa programação.

Ela em si não é nova, mas sua apresentação está mais interativa mostrando a parte do seu código que está ocorrendo o erro. Como podemos ver ela apresentará o erro a esquerda e o código com a linha destacada a direita. Muito prático!

Whoops Laravel 5.5

Tela de Whoops do Laravel 5.5

Validação de requisições

Nas versões anteriores do Laravel, uma validação de dados deveria ser feita através da Controller. Agora é possível que a própria Request execute a validação e retorne a mensagem. E ao fim da validação a mesma retornará apenas os dados que foram tratados por esta validação. Para deixar mais claro vou deixar um exemplo de como era e como ficou esta chamada para salvamento de um produto.

Antes (Laravel <5.5)

 

Agora

 

Retorno

 

Presets de FrontEnd

Esta é para os Frontenders de plantão. Agora o Laravel deixa disponível alguns Presets já configurados para você trabalhar com Vue, React e Bootstrap. Mas se você não quiser também pode utilizar nenhum Preset. Você pode utilizar e configurar estes Presets através do “php artisan preset Vue” por exemplo.

API Resources

Para não alongar demais selecionei um último item que achei bem útil. Resources Classes agora permitem que nós transformemos nossas Eloquent Models para estruturas em JSON. Isto facilita e traz consistência para a liberação de uma API para o público.

Claro que este novo lançamento não se limita a estas novidades. Mas para os mais aficionados pelo lançamento deixo uma integra, em inglês, sobre todas as novidades que esta versão trouxe. Laravel 5.5 LTS is Now Released

Instalando o Laravel 5.5

Configurando o acesso SSH

A instalação do Laravel 5.5 é muito simples já que ele conta com o auxilio do composer. Para começar configurei minha hospedagem cloud. Escolhi ela pois me permite ter o acesso SSH da minha instância, existe o isolamento de recurso que permite o crescimento do projeto e consigo a praticidade do painel de controle.

No painel eu consigo ver meu IP de acesso e caso não tenha ainda, solicitar a senha para acesso SSH através do HelpDesk.

Painel de hospedagem Cloud

Painel de controle da hospedagem Cloud

Com todas as configurações na mão, agora é só acessar o SSH. No caso estou utilizando o programa MRemoteNG para windows.

Instalação do composer

O Primeiro passo será instalar o Composer:
[bash]php composer-setup.php –install-dir=bin –filename=composer[/bash]

 

Após instalado comece a rodar o serviço:
[bash]php bin/composer[/bash]

 

Instalação do Laravel

Agora que o Composer está instalado e configurado vamos ao Laravel… Acesse o diretório aonde você deseja criar o projeto novo (meu_projeto) e rode o comando abaixo:
[bash]composer create-project –prefer-dist laravel/laravel meu_projeto[/bash]

 

Este procedimento poderá demorar um pouco. (Comigo foi algo em torno de 3 min). Mas se tudo der certo você já poderá acessar o Laravel no diretório “meu_projeto” em que você pediu para instalar.

Após instalado o sistema, no diretório do projeto, você precisa configurar seu arquivo de ambiente. O Laravel fornece um template padrão chamado .env.example. Para começar podemos apenas renomear este arquivo para .env utilizando o código abaixo:
[bash]mv .env.example .env[/bash]

 

OBS.: Caso você não faça o procedimento acima e tentar acessar seu projeto pelo navegador, você verá a seguinte mensagem

Laravel 5.5 something went wrong

Tela de erro do Laravel 5.5 sem a exibição de debugs

Por fim é preciso rodar o comando abaixo para criar a chave da sua aplicação. Ela é utilizada para garantir a segurança interna do Laravel e o Framework só funcionará com esta chave setada em seu .env. Para criá-la basta roda o comando abaixo.
[bash]php artisan key:generate[/bash]

 

OBS.: Se você acessar sua nova instalação assim que você instalar sua tela apresentará o erro abaixo.

Whoops Laravel 5.5

Erro por não geração de “encryption Key”

Depois de tudo instalado você verá a tela de bem vindo do Laravel e já pode começar a implementar seu projeto.

O Laravel é um Framework bem completo e permite fazer muita coisa com simplicidade no código. Na verdade este é o intuito deles… Ter um código limpo bonito e simples de entender.

heredoc e nowdoc – tratamento de strings com PHP

heredoc e nowdoc

Exemplo de utilização do heredoc

Hoje despedimos da série de posts sobre tratamento de strings com PHP mostrando dois comandos que auxiliam bastante, principalmente na leitura do código programado. Estou falando do heredoc e do nowdoc. Estes dois comandos são formas de representação de strings, assim como os delimitadores de aspas simples e duplas, mais comumente utilizado.

Mas, por que utilizá-los ao invés das tão práticas aspas? Posso definir sua utilidade por 3 motivos:

  1. Praticidade
  2. Fácil leitura
  3. Fácil manutenção

O que é e como usar o heredoc

O heredoc permite você trabalhar com blocos de textos maiores sem se preocupar em escapar aspas duplas ou simples. Isto porque ele utiliza um demarcador “tagueado” identificando o começo e no final de cada string. Ele, assim como a aspas duplas, permite que você trabalhe com variáveis dentro da string. O heredoc irá interpretar a varíavel perfeitamente, sem concatenações e etc.

Para utilizá-lo você inicia o bloco de texto  com uma sequência de três sinais de menor e então identifique o bloco com um nome qualquer, <<<html, por exemplo. A partir daí tudo que você escrever será considerado como um string. Veja o exemplo abaixo:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<title></title>
	<link rel="stylesheet" href="">
</head>
<body>

<?php
	$seu_nome = "Felipe Moraes";
	$endereco = "R. Josefina alves, 45, Maceió, AL.";
	
	//Este seria o código com aspas duplas
	$html = "<div id=\"ola\">
    	<p>Olá {$seu_nome},</p>
    	<p>Que tal visitar a gente em nossa sede: {$endereco}?</p>
  	</div>";
	
	echo "<h2>com aspas:</h2>".$html;
	
	//Este seria o código com heredoc
	$html = <<<HTML
  	<div id="ola">
	    <p>Olá {$seu_nome},</p>
    	<p>Que tal visitar a gente em nossa sede: {$endereco}?</p>
  	</div>
HTML;

	echo "<h2>com heredoc:</h2>".$html;

?>
	
</body>
</html>

Alguns detalhes que é preciso saber ao utilizar o heredoc é que caso necessite do carácter $ você precisará escapá-lo já que o heredoc identifica variáveis. Outra coisa é que para finalizar o bloco de texto você deve repetir o nome que identifica o heredoc na linha abaixo do texto. E você não deve ser indentar a linha de término para que tudo funcione perfeitamente.

Utilizei também algumas chaves para identificar as variáveis. Isto não é obrigatório, mas, auxilia na leitura do código e como este é um dos motivos de se utilizar o heredoc, vamos fazer direito.

E agora o nowdoc

O nowdoc tem utilização bem semelhante ao heredoc, porém, ele não consegue interpretar variáveis ou caracteres de controle. Este comando é compatível a partir do php 5.3. Para utilizá-lo segue a mesma lógica, com um pequeno detalhe, aqui o identificador inicial deve ter aspas simples, <<<‘HTML’. Veja o exemplo:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
</head>
<body>

<?php	
	//Este seria o código com aspas simples
	$html = '<div id=\'ola\'>
    	<p>Olá Felipe,</p>
    	<p>Que tal vir comer um queijo com a gente?</p>
  	</div>';
	
	echo "<h2>com aspas:</h2>".$html;
	
	//Este seria o código com nowdoc
	$html = <<<'HTML'
  	<div id="ola">
	    <p>Olá Felipe,</p>
    	<p>Que tal vir comer um queijo com a gente?</p>
  	</div>
HTML;

	echo "<h2>com heredoc:</h2>".$html;

?>
	
</body>
</html>

É possível utilizar o nowdoc para incluir um código PHP dentro do seu código php, assim você mantém a organização sem que nenhum código seja executado. Repare também que apesar do identificador inicial vir com aspas simples o final não necessita.

Concluindo, estas duas formas são muito amigáveis para trabalhar com blocos de textos grandes e que envolvem código e texto. Não que eles substituam as boas e velhas aspas simples e duplas, ainda utilizaremos elas muitas vezes para blocos pequenos e simples. Mas, sem dúvida nenhuma trabalhar com heredoc ou nowdoc torna a leitura e escrita de uma string de códigos extensa, muito mais simples.

Tenha todo o desempenho para o seu site com a Hospedagem Cloud DialHost. Servidores em cloud prontos para receber sites em PHP. Saiba Mais ou veja nossos produtos.

 

Felipe Moraes
Felipe Moraes

Desde pequeno eu adorei tecnologia e este sentimento me fez estudar e trabalhar com desenvolvimento, design de interfaces e interação. Esta vontade de melhorar e aprender com a tecnologia me fez estar aqui na DialHost desde 2012.

strstr e stristr, separando strings

strstr php

Exemplo de uso do strstr

Em um post anterior eu expliquei sobre o uso das funções explode e implode. Hoje tenho duas funções que podem ter utilização similar. Digo podem pois, sua função básica não tem nada haver com o explode, mas, seu retorno pode ser útil para separar uma determinada string, como separar o usuário de um e-mail por exemplo.

Estou falando da função strstr e stristr, estas duas funções procuram pela primeira ocorrência da string que você passar como parâmetro. Se ela encontrar qualquer ocorrência da string a função retornará a parte anterior a esta ocorrência.

strstr e stristr

As duas funções são bem semelhantes mas possuem uma única diferença, a strstr é case sensitive. Assim se a busca exige precisão entre maiúsculas e minusculas o uso da strstr é o mais recomendado. Mas vamos ao código.

$email = 'felipe_string_php@dialhost.com.br';

$find_it = '@';

$part_string_1 = strstr ( $email , $find_it , true );

echo '<b>buscando o usuário: </b>'.$part_string_1;

echo '<br>';

$part_string_2 = strstr ( $email , $find_it );

echo '<b>buscando o domínio: </b>'.$part_string_2;

echo '<br>';

$part_string_3 = substr($part_string_2, 1);

echo '<b> domínio sem o @: </b>'.$part_string_3;

Acima usei um exemplo simples que separa o  domínio do usuário. No caso defini na variável $email o e-mail que gostaria de tratar. Esta variável pode ser preenchida manualmente ou por um formulário (o que possivelmente será o mais natural.).

Depois defini o parâmetro da busca ‘@’ e assim fui usando o strstr com o parâmetro [before needle] como true (para pegar o valor anterior) ou false (para pegar o valor posterior). Por fim fiz uma complementação do código utilizando a função substr. Ela é responsável por quebrar uma palavra a partir de um determinado ponto, mas ela eu explico melhor em um outro artigo. Como resultado tive estes retornos.

Neste caso a utilização da stristr teria o mesmo resultado, já que se trata de um caractere especial. Mas, se sua busca envolver um caracter alfabético, ai sim ela poderá ter mais valia.

Ela também pode ser utilizada como forma de verificar a existência de uma palavra, letra ou termo dentro de um texto. E na verdade ela se trata de uma função bem simples para este tipo de verificação.

Espero que este comando tenha sido útil. No próximo mês continuo com esta série explicando mais alguns comandos para tratamento de strings.

Tenha todo o desempenho para o seu site com a Hospedagem Cloud DialHost. Servidores em cloud prontos para receber sites em PHP. Saiba Mais ou veja nossos produtos.

 

Felipe Moraes
Felipe Moraes

Desde pequeno eu adorei tecnologia e este sentimento me fez estudar e trabalhar com desenvolvimento, design de interfaces e interação. Esta vontade de melhorar e aprender com a tecnologia me fez estar aqui na DialHost desde 2012.

strtoupper, strtolower… Caracteres maiúsculos e minúsculos

strtoupper e mb_strtoupper - controle de caractere minúsculos e maiúsculos

Exemplo utilizandop strtoupper e mb_strtoupper

Para realizar o controle de caracteres maiúsculos e minúsculos o PHP disponibiliza diversas funções como: lcfirst, ucfirst, ucwords, strtolower, strtoupper e mb_strtoupper. Estas 5 funções realizam basicamente alteração de caracteres maiúsculas para minusculas e vice-versa. Por isto resolvi dar uma estudada nas mesmas e trazê-las em um pacote dentro deste post.

lcfirst

Comecemos pela função lcfirst, ela é útil quando queremos transformar apenas a primeira letra de uma string em minúscula. Por exemplo quando temos uma frase de algum artigo e queremos salvar isto com tudo em minúsculo. Não tem muito o que explicar dela, seu uso é bem simples, você passa a string e ela te retorna com o primeiro caractere em minúsculo. Seu uso é assim:

lcfirst ($string );

ucfirst

Ao contrário da lcfirst, a função ucfirst transforma a primeira letra de uma string em maiúscula, então se você quiser pegar aquela frase toda em minúscula e capitalizar o primeiro caractere, esta é a função. Seu uso é exatamente igual a lcfirst.

ucfirst ($string );

ucwords

A função ucwords foi um pouquinho além, e transforma o primeiro caractere de cada palavra para maiúsculo. O uso continua o mesmo:

ucwords ($string );

strtolower

No caso de conversão de caracteres a strtolower, assim como a strtoupper, são mais comuns. A strtolower transforma qualquer caractere maiúsculo da string passada para minúsculo. A forma de usar ainda continua a mesma:

strtolower ($string );

A strtolower pode ser utilizada para padronizar nomes de arquivos em uploads ou caminhos. Em URLs, caracteres 100% em minúsculos  são mais amigáveis para a digitação do usuário. Isto porque apesar de domínios não serem case sensitive as URLs são.

Como não é usual digitarmos nada usando letras maiúsculas nas URLs, manter caracteres sempre em minúsculo garante que o usuário tem um conteúdo único.

strtoupper e mb_strtoupper

A strtoupper é o oposto da strtolower, sendo assim, ela se responsabiliza por transformar toda a string em maiúsculo. Vale lembrar que a strtoupper pode não trazer resultados corretos quando utilizada em strings com acento. Infelizmente a função não identifica letras acentuadas como caractere alfabético válido, por isto utilize a função mb_strtoupper nestes caso. Para não me alongar muito vou mostrar a utilização de ambas abaixo:

strtolower ($string );
mb_strtolower ($string,"utf-8" );

Como podem ver a única diferença entre uma e outra é que na mb_strtolower a gente define também o charset que desejamos e assim a função consegue identificar os caracteres como alfabéticos.

Por serem funções usuais, mas com aplicações simples e variadas, não consegui achar ou pensar em um exemplo único para a utilização destes comandos, mas convido a todos postarem nos comentários sobre usos interessantes destas funções. Abs e aguardem no próximo artigo falarei sobre strstr e stristr.

Tenha todo o desempenho para o seu site com a Hospedagem Cloud DialHost. Servidores em cloud prontos para receber sites em PHP. Saiba Mais ou veja nossos produtos.