Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

henry_osn

Relacionar tabelas com Zend 2 + Doctrine + Angularjs

Recommended Posts

Olá a todos!

 

Estou desenvolvendo uma aplicação em Zend2 + Doctrine + Angularjs na qual tenho uma lista de usuários.

Em cada usuário posso fazer edições através de um formulário.

Nesse formulário há campos os quais precisam fazer as seguintes tarefas :

 

1-) Campo 1: consultar todos os registros existentes em uma (ou mais) tabela(s).

2-) Botão do campo 1: após escolher algum desses conteúdos, o mesmo salva seu respectivo ID em uma tabela2.

3-) Posso continuar salvando mais registros do campo 1 na tabela2.

4-) O que eu salvei fica disponível para consulta (em um array ou lista, por exemplo).

 

Pensei em criar duas tabelas e duas entidades no Zend.

Depois utilizar herança para trabalhar com os campos da tabela2 na primeira entidade.

Porém não estou conseguindo fazer isso na prática -> montar as tabelas corretamente, as entidades e lidar com esses dados no Angularjs.

 

Dei uma olhada em mapeamento de tabelas no manual do Doctrine, mas não encontrei nada efetivamente para meu caso e muito menos como trabalhar unto com o Angularjs.

Alguém teria uma ideia por onde é o caminho? Algum exemplo?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Luciana, obrigado pelo tuto, mas ainda não é o que eu preciso. Esse tudo tem o básico, que até peguei, mas não encontrei nada sobre retornar valores de múltiplas tabelas em uma busca.

 

Bem, estou procurando, estudando, mas se alguém tiver mais alguma dica, eu agradeço.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para facilitar o entendimento, vou apresentar um pouco do que fiz e do que preciso.

 

tenho a entidade "People"

class Person
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=200, nullable=false)
     */
    private $title;
}

e a entidade "Relationship"

class Relationship
{

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=200, nullable=false)
     */
    private $title;
}

A dúvida é, como faço para recuperar em uma busca os campos "title" de Person e Relationship e depois guardar seus respectivos IDs em uma terceira tabela?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Air-Gear
      Olá, na parte de enviar eu conseguir, mas manter até terminar o cadastro eu não conseguir. Eu vou contar toda a história para ficar mais claro possível.
       
      Eu precisei implementar um Upload de qualquer imagem ou PDF na página de solicitar compras. O site utiliza AngularJS, a primeira versão do Angular. Eu tentei fazer sem depender de PHP, mas na internet achava só a parte de Front-End e ninguém sabia fazer no Back-End. Então eu resolvi fazer com PHP mesmo.
       
      Nó código PHP, ele aceita todos as extensões de imagens mais o PDF e é possível envia-los todos de uma vez na quantidade que quiser. Todos os arquivos serão renomeados, contendo no nome o ID do usuário logado pego pela função javascript, o dia do mês, o mês, o ano, o dia da semana, a hora, o minuto, o segundo, se é AM ou PM e uma numeração aleatório. O arquivo PDF vai continuar sendo PDF e todas as imagens serão JPG. No final, todos serão enviados para uma pasta chamada upload.
       
      Só que agora eu preciso jogar de volta para página para salvar os novos nomes dos arquivos para continuar o cadastro da solicitação de compras. Como AngularJS utiliza Javascript, eu tentei usa-lo dentro do PHP utilizando EOF, mas não tive resultado. Eu só consigo com HTML com as diretivas do AngularJS. Na parte do API, nos atributos, eu declarei "nomeArquivo: []," , para salvar os nomes dos arquivos.
       
      Seguem o código.
      <div class="row"> <div class="col-sm-12 col-md-6 "> <div class="upload_form_cont"> <form id="upload_form" enctype="multipart/form-data" method="post" action="/profile-upload"> <div> <div><label for="image_file">Selecione o arquivo de imagem</label></div> <div><input type="file" name="image_file" id="image_file" accept="image/*" onchange="fileSelected();" /></div> </div> <div> <input type="button" value="Upload" onclick="startUploading()" /> </div> <div id="fileinfo"> <div id="filename"></div> <div id="filesize"></div> <div id="filetype"></div> <div id="filedim"></div> </div> <div id="error">Você deve selecionar apenas arquivos de imagem válidos!</div> <div id="error2">Ocorreu um erro ao enviar o arquivo</div> <div id="abort">O upload foi cancelado pelo usuário ou o navegador interrompeu a conexão</div> <div id="warnsize">Seu arquivo é muito grande. Não podemos aceitar isso. Selecione arquivos pequenos</div> <div id="progress_info"> <div id="progress"></div> <div id="progress_percent">&nbsp;</div> <div class="clear_both"></div> <div> <div id="speed">&nbsp;</div> <div id="remaining">&nbsp;</div> <div id="b_transfered">&nbsp;</div> <div class="clear_both"></div> </div> <div id="upload_response"></div> </div> </form> </div> </div> </div> upload.php
      <?php function bytesToSize1024($bytes, $precision = 2) { $unit = array('B','KB','MB'); return @round($bytes / pow(1024, ($i = floor(log($bytes, 1024)))), $precision).' '.$unit[$i]; } //Pega o id do usuário logado $id_url = $_GET['id']; // Numero de campos de upload $numeroCampos = count($_FILES['image_file']['name']); // Tamanho máximo do arquivo (em bytes) $tamanhoMaximo = 1024*1024*2; // Extensões aceitas $extensoes = array(".jpg", "jpeg", ".gif", ".png", ".pdf", ".bmp", ".pdf", ".tiff"); //Local da pasta $_UP['pasta'] = '../upload/'; $substituir = false; for ($i = 0; $i < $numeroCampos; $i++) { // Informações do arquivo enviado $sFileName = $_FILES['image_file']['name'][$i]; $sSize = $_FILES['image_file']['size'][$i]; $sFileSize = bytesToSize1024($sSize, 1); $nomeTemporario = $_FILES['image_file']['tmp_name'][$i]; // Verifica se o arquivo foi colocado no campo if (!empty($sFileName)) { $erro = false; // Verifica se o tamanho do arquivo é maior que o permitido if ($sSize > $tamanhoMaximo) { $erro = "O arquivo " . $sFileName . " não deve ultrapassar " . $tamanhoMaximo. " bytes"; } // Verifica se a extensão está entre as aceitas elseif (!in_array(strrchr($sFileName, "."), $extensoes)) { $erro = "A extensão do arquivo <b>" . $sFileName . "</b> não é válida"; } // Verifica se o arquivo existe e se é para substituir elseif (file_exists($_UP['pasta'] . $sFileName) and !$substituir) { $erro = "O arquivo <b>" . $sFileName . "</b> já existe"; } else{ //Pega a extensão do arquivo $TipoExtensao = pathinfo($sFileName, PATHINFO_EXTENSION); // O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta // Primeiro verifica se deve trocar o nome do arquivo $unixTime = time(); $timeZone = new \DateTimeZone('America/Sao_Paulo'); $time = new \DateTime(); $time->setTimestamp($unixTime)->setTimezone($timeZone); $formattedTime = $time->format('d-m-Y_l_h-i-s-a'); $aleatorio = rand(); if($TipoExtensao == 'pdf'){ $nome_final = $id_url .'_'. $formattedTime .'_'. $aleatorio .'.pdf'; }else{ $nome_final = $id_url .'_'. $formattedTime .'_'. $aleatorio .'.jpg'; } // Depois verifica se é possível mover o arquivo para a pasta escolhida if (move_uploaded_file($nomeTemporario, $_UP['pasta'] . $nome_final)) { // Upload efetuado com sucesso, exibe uma mensagem e um link para o arquivo echo "Upload do arquivo ".$sFileName." foi efetuado com sucesso!"; echo "</br>"; echo<<<EOF <p>Eu tentei implementar o retorno da página aqui!</p> <p></br></p> <p></br></p> EOF; } else { // Não foi possível fazer o upload, provavelmente a pasta está incorreta echo "Não foi possível enviar o arquivo, tente novamente"; echo "</br>"; } } } else { echo "Selecione algum arquivo de imagem ou PDF para fazero upload."; } } ?>  
    • Por edivancastro
      Pessoal, em anexo segue meu modelo de banco de dados (duas tabelas). Estou utilizando doctrine. Este é um modelo resumido para eu tentar explicar o que estou passando.
       
      As minhas classes Banner e Menu extendem de classes diferentes (ClasseX e ClasseY) e estas classes Banner e Menu, como voces podem ver possuem um Link que pode ser para uma categoria, artigo ou linkexterno (http://outrosite.com). Dai surgiu essa necessidade de min criar uma classe Link. Porem na minha opiniao é inviavel eu criar uma tabela no banco de dados para armazenar link, ou seja, a classe link não chega ser uma entidade concreta (tabela), seria apenas coluna no BD e para cada tipo de Link há uma estrategia para gerar o seu respectivo LinkURL, conforme pode ser observado na classe Link.
       
      Pensei em fazer class Menu extends Link   e  class Banner extends Link, porem as classes banner e menu ja extendem de outras classes e como o PHP não aceita herança multipla não tem como.
       
      enfim, como faço para mapear a classe Link para este modelo de banco de dados meu?
       
       
       
      <?php /** * @ORM\Entity */ class Banner extends ClasseX{ /** * @ORM\Id */ private $id; /** * @ORM\Column('type=string') */ private $descricao; private $link; protected setLink(Link $link){ $this->link = $link; } protected getLink(){ return $this->link; } }  
       
       
      <?php /** * @ORM\Entity */ class Menu extends ClasseY{ /** * @ORM\Id */ protected $id; /** * @ORM\Column(type="string") */ protected $descricao; protected $link; protected setLink(Link $link){ $this->link = $link; } protected getLink(){ return $this->link; } }  
      <?php class Link{ const TIPO_ARTIGO=1; const TIPO_CATEGORIA=2; const TIPO_LINKEXTERNO=3 protected $tipo_link; protected $categoria; protected $artigo; proctected $linkexterno; public function setLink($link){ if(is_object($link)){ switch(get_class($link)){ case Artigo::class: $this->tipo = self::TIPO_ARTIGO; $this->artigo = $link; break; case Categoria::class: $this->tipo = self::TIPO_CATEGORIA; $this->categoria = $link; break; } }else{ $this->tipo = self::TIPO_LINKEXTERNO; $this->linkexterno = $link; } } public function getLinkUrl(){ switch($this->tipo_link){ case self::TIPO_ARTIGO; return $this->makeUrlToArtigo(); break; case self::TIPO_CATEGORIA; return $this->makeUrlToCategoria(); break; case self::TIPO_LINKEXTERNO; return $this->linkexterno; } } }  

    • Por edivancastro
      Pessoal minha aplicacao zf tem varios modulos e em todos estes modulos preciso executar uma operacao de log. geralmente eu faço isso na classe Module . nestas classes eu executo o  metodo onBootstrap().
       
      O problema é que eu tenho que em todos os modulos tenho que colocar essa mesma função de log, uma vez que cada modulo tem seu boostrap, ficando repetitivo. Como faço no zend para executar em todos modulos um unico bootstrap sem ter que ficar setando isso por modulo?
       
       
       
       
       
    • Por edivancastro
      Pessoal, estou com um problema meio f*** aqui. estou desenvolvendo um projeto em zend framework e notei que ele so aceita charset UTF8. por mais que eu mude o charset no arquivo layout.phtml (meta charset="iso-8859-1") o framework continua enviando header utf8.
       
      O manual do zend framework explica que por padrao o zend trabalha com charset utf8 e caso queira mudar teria que criar um view renderr conforme explica na pagina.
      https://framework.zend.com/manual/2.3/en/modules/zend.view.helpers.head-style.html
       
      realizei o procedimento e criei um view renderer porem continua trabalhando com charset utf-8. Gostaria de saber aqui quem trabalha com esse framework poderia me ajudar a mudar o charset para o iso-8859-1

    • Por gust.php
      Bom dia senhores.
       
      Estou tentando agrupar uma consulta por data no Doctrine se sucesso .... Alguém pode ajudar?
       

             $em = $this->getEntityManager();                $qb = $em->createQueryBuilder();         $qb->select('u');         $qb->from('Servico\Model\Servico', 'u');                  $qb->where('u.STATUS IN (:status)');         $qb->setParameter('status', ['2', '3', '4', '6']);         if ($cliente) {             $qb->andWhere('u.CLIENTE = :cliente');             $qb->setParameter('cliente', $cliente);         }         if ($fornecedor) {             $qb->andWhere('u.FORNECEDOR = :fornecedor');             $qb->setParameter('fornecedor', $fornecedor);         }         if ($motorista) {             $qb->andWhere('u.MOTORISTA = :motorista');             $qb->setParameter('motorista', $motorista);         }         if ($fileCliente) {             $qb->andWhere('u.FILE = :file_cliente');             $qb->setParameter('file_cliente', $fileCliente);         }         if ($inicio AND $fim) {             $qb->andWhere('u.DATA_INICIO BETWEEN :inicio AND :fim');             $qb->setParameter('inicio', $inicio);             $qb->setParameter('fim', $fim);         }         $qb->orderBy('u.DATA_INICIO', 'ASC');         $qb->addOrderBy('u.HORA_INICIO', 'ASC');         //$qb->groupBy('u.DATA_INICIO');                     ---> Isso não funciona         $query = $qb->getQuery();         return $query->getResult();
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.