Ir para conteúdo

Arquivado

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

  • 0
srmacedo

Duvida Laravel

Pergunta

Bom dia,

iniciei os estudos voltados ao Laravel.

Por enquanto está tudo muito lindo, porém me surgiu uma dúvida, onde por exemplo:

 

Exemplo:

Vamos imaginar um grupo de pessoas, onde cada grupo possui um líder

  • Líder
  • Pessoas
  • Cargos no grupo

 

Seguindo uma hierarquia, onde o líder daquele grupo, pode adicionar N pessoas em X grupos.

Até ai tudo bem, seria apenas usar:

<?php
class HomeController
{
    public function add($pGrupo, $pPessoa) {
     	$grupo = new Grupo();
      	$grupo->grupoID = $pGrupo;
      	$grupo->pessoaID = $pPessoa;
      	$grupo->liderID = 5; // não sei se poder usar session, enfim...
        $grupo->save();
    }
}

 

O problema é que eu preciso verificar se o líder realmente é quem ele diz ser (líder)

 antes de poder cadastrar ao banco de dados.

 

Teria problemas fazer isso antes de adicionar?

 

<?php
class HomeController
{
    public function add($pGrupo, $pPessoa) {
     	$grupo = new Grupo();
      	$lider = Lider::where('id', '=', '5')->get();

      	if (count($lider) > 0) 
        {
          $grupo->grupoID = $pGrupo;
          $grupo->pessoaID = $pPessoa;
          $grupo->liderID = 5; // não sei se poder usar session, enfim...
          $grupo->save();
        }
    }
}

 

Caso tenha, qual seria a forma correta de se fazer isso?

Visto que em caso real eu posso ter que checar muitas outras coisas antes...

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

9 respostas a esta questão

Recommended Posts

up

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sou entendido de Laravel e também preciso lhe dizer que entre o Laravel 5.1, 5.2, 5.3 e 5.4 as coisas mudam bastante, não tenho certeza se o ORM deles muda muito, pelo doc parece estar ainda bem compatível, então irei citar me baseando no 5.4 (pois você não citou a versão).

 

Não há problema algum em fazer isto olhando do ponto de vista:

 

Lider::where('id', '=', '5')->get();

No entanto eu pessoalmente acho bastante desnecessário pegar o resultado todo e depois usar o `count($resultado)`,  o proprio Eloquent tem um método chamado `::cout()`, poderia fazer assim:

 

public function add($pGrupo, $pPessoa)
{
    $idDoLider = 5; // talvez a sessão, o que me parece apropriado

    $grupo = new Grupo();
    $lider = Lider::where('id', '=', $idDoLider)->count();

    if (count($lider)) {
      $grupo->grupoID = $pGrupo;
      $grupo->pessoaID = $pPessoa;
      $grupo->liderID = $idDoLider;
      $grupo->save();
    }
}

 

Também vale notar que poderia usar, além do método `save`, os métodos firstOrCreate e firstOrNew.

 

- firstOrCreate  a irá tentar retornar os dados do banco do primeiro item localizado, se não encontrar tenta persistir no banco e retornará o Model, conforme exemplo da doc:

$flight = App\Flight::firstOrCreate(['name' => 'Flight 10']);

 

- firstOrNew irá tentar retornar os dados do banco do primeiro item localizado, se não encontrar irá retornar um Model, mas não irá persistir no banco, o que pode ser interessante se antes de usar o "save" você quiser ajustar algo nos dados, conforme exemplo da doc:

$flight = App\Flight::firstOrNew(['name' => 'Flight 10']);

 

Outro detalhe é que o "get" retorna um objeto como array (ou algo "iterável"), no caso se fizer a consulta no where por um ID principal é porque pretende apenas trazer os dados de uma única linha, se usar "get" como citei terá que usar o for, foreach, etc, mas se algo invés disto pode usar o "->first();" que irá retornar o Model diretamente, seria algo como:

Pessoa::where('id', 98)->first();

Além do first, firstOrCreate e firstOrNew existe um método muito útil, imagine que quer exibir uma página de perfil de um cliente ou usuário, se ele não existir você provavelmente iria colocar uma página de erro e talvez usar um código HTTP, o Eloquent tem um método chamado `->firstOrFail();`, ou seja se não encontrar o que procura ele irá emitir uma exception chamada "Illuminate\Database\Eloquent\ModelNotFoundException" o que vai emitir um código 404 para o cliente (navegador) e se tiver páginas de erro customizada no Laravel poderá direcionar.

 

Citar

Nota: Creio que o sinal de igual seja redundante where('id', '=', $idDoLider), ao menos no Laravel 5.4, creio que possa fazer assim diretamente where('id', $idDoLider), só será necessário se for usar <>, >, <, etc.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, brcontainer disse:

Não sou entendido de Laravel e também preciso lhe dizer que entre o Laravel 5.1, 5.2, 5.3 e 5.4 as coisas mudam bastante, não tenho certeza se o ORM deles muda muito, pelo doc parece estar ainda bem compatível, então irei citar me baseando no 5.4 (pois você não citou a versão).

 

Não há problema algum em fazer isto olhando do ponto de vista:

 


Lider::where('id', '=', '5')->get();

No entanto eu pessoalmente acho bastante desnecessário pegar o resultado todo e depois usar o `count($resultado)`,  o proprio Eloquent tem um método chamado `::cout()`, poderia fazer assim:

 


public function add($pGrupo, $pPessoa)
{
    $idDoLider = 5; // talvez a sessão, o que me parece apropriado

    $grupo = new Grupo();
    $lider = Lider::where('id', '=', $idDoLider)->count();

    if (count($lider)) {
      $grupo->grupoID = $pGrupo;
      $grupo->pessoaID = $pPessoa;
      $grupo->liderID = $idDoLider;
      $grupo->save();
    }
}

 

Também vale notar que poderia usar, além do método `save`, os métodos firstOrCreate e firstOrNew.

 

- firstOrCreate  a irá tentar retornar os dados do banco do primeiro item localizado, se não encontrar tenta persistir no banco e retornará o Model, conforme exemplo da doc:


$flight = App\Flight::firstOrCreate(['name' => 'Flight 10']);

 

- firstOrNew irá tentar retornar os dados do banco do primeiro item localizado, se não encontrar irá retornar um Model, mas não irá persistir no banco, o que pode ser interessante se antes de usar o "save" você quiser ajustar algo nos dados, conforme exemplo da doc:


$flight = App\Flight::firstOrNew(['name' => 'Flight 10']);

 

Outro detalhe é que o "get" retorna um objeto como array (ou algo "iterável"), no caso se fizer a consulta no where por um ID principal é porque pretende apenas trazer os dados de uma única linha, se usar "get" como citei terá que usar o for, foreach, etc, mas se algo invés disto pode usar o "->first();" que irá retornar o Model diretamente, seria algo como:


Pessoa::where('id', 98)->first();

Além do first, firstOrCreate e firstOrNew existe um método muito útil, imagine que quer exibir uma página de perfil de um cliente ou usuário, se ele não existir você provavelmente iria colocar uma página de erro e talvez usar um código HTTP, o Eloquent tem um método chamado `->firstOrFail();`, ou seja se não encontrar o que procura ele irá emitir uma exception chamada "Illuminate\Database\Eloquent\ModelNotFoundException" o que vai emitir um código 404 para o cliente (navegador) e se tiver páginas de erro customizada no Laravel poderá direcionar.

 

 

 

Muito obrigado pelo seu comentário. Supriu algumas dúvidas minhas sobre.

Porém o que realmente me preocupa é que eu preciso fazer consulta para verificar X coisa.

Digamos por exemplo um sistema escolar, onde o professor tem permissão para dar aula na TURMA 200 sob a matéria Inglês.

 

O mesmo quer adicionar a nota dos alunos, porém antes de eu permitir o envio eu precisaria verificar se aquele professor realmente tem permissão sob aquela turma/matéria, verificar se o aluno consta naquela turma e se está matriculado.

Acho que deu para expressar melhor, ou seja olha quantas verificações eu teria que fazer.

É normal eu fazer isso tudo no mesmo método ou tem alguma outra forma de se fazer isso com laravel?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi, o que você quer é fazer o relacionamento entre as tabelas, digamos você tem como mostrar como estas são? Talvez o CREATE TABLE. Se não tiver as tabelas recomendo que leia isto primeiro Qual é a diferença entre INNER JOIN e OUTER JOIN? Entender a diferença é relativo para o caso especifico creio que vá necessitar apenas do innerjoin.

 

Ainda sim @jamesbond, se você não tiver as tabelas ou algo assim amanhã (hoje) tento preparar um exemplo pra ti e mostro também como criar o querybuilder pelo Eloquent

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado novamente.

Mas eu sei como elaborar a query (não usando o facade do laravel, estou ainda lendo a documentação para obter mais info sobre), digo em questão de arquitetura.

É correto fazer essas verificações todas, verificar se existe, etc.

Tudo naquele método que vai cadastrar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@jamesbond entenda que correto é algo extremamente relativo e que pode ser interpretado de inumeras maneiras por pessoas diferentes, se você tem o conhecimento de MySQL e de JOIN, então o que lhe resta é adaptar para o Eloquent.

 

Como eu disse sem saber a estrutura da tabela não posso lhe indicar o caminho mais adequado, as vezes um SELECT simples na tabela GRUPO resolve, as vezes terá que fazer um relacionamento entre GRUPO e LIDER.

 

Agora a resposta curta é, sim tem que checar, de preferencia poderia até isto para um Middleware (mas não vou falar disto agora porque é algo bem mais complexo), qreio que checar se o GRUPO pertence ao LIDER já seria o suficiente (estou presumindo), um pseudo-código:

$idDoLider = 5;//Id do lider na sessão

//Checa se esta conta de lider existe e esta ativada (supondo que possa desativar por segurança em caso de demissão)
if (!Lider::where('id', $idDoLider)->where('ativo', 1)->count()) {
     return 'Este grupo não pertence a ti ou não existe';
}

//Checa se este grupo pertence ao lider logado no momento
if (!Grupo::where('id', $idGrupoQueIraCadastrarPesso)->where('idLider', $idDoLider)->count()) {
     return 'Este grupo não pertence a ti ou não existe';
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
26 minutos atrás, brcontainer disse:

@jamesbond entenda que correto é algo extremamente relativo e que pode ser.....

 

Esse foi um exemplo simples e curto. Porém no atual projeto é mais ou menos o que eu passei no segundo exemplo sob a escola.

 

Onde seria por exemplo a seguinte estrutura de tabelas:

  • Professor
  • Estudante
  • ConfProfessor (TURMA + CLASSE)
  • Chamada

 

Vamos elaborar um code aqui

<?php

namespace App\Http\Controllers;
use Request;
use App\Professor;
use App\Estudante;
use App\ConfProf;
use App\ConfClasse;
use App\Turma;
use App\Disciplina;

class ChamadaController extends Controller
{
  public function adicionar() 
  {	
    // obtém o valor inserido no input turma
  	$turma = Request::input("turma");
    
    // obtém o valor inserido no input disciplina
    $disciplina = Request::input("disciplina");
    
    // obtém o valor inserido no input estudante
    $estudante = Request::input("estudante");
    
    // obtém o id do professor logado
    $professor = Request::session()->get("usuarioID", "");
    
    // não sei ainda a forma de se fazer direto igual você expecificou
    $consultaConfProf = ConfProf::where("professor", $professor)->where("disciplina", $disciplina)->where("turma", $turma)->get();
    
    // consulta a turma de acordo com a mesma selecionada
    $consultaTurma = Turma::where("id", $turma)->get();
    
    // consulta a disciplina de acordo com a mesma selecionada
    $consultaDisc = Disciplina::where("id", $disciplina)->get();
    
    // consulta o estudante de acordo com o registro de matricula
    $consultaEstu = Estudante::where("rm", $estudante)->get();
    
    // consulta no banco de dados
    // se existe aquela disciplina
    // sob a classe selecionada
    $consultaConfClasse = ConfClasse::where("classeID", $turma)->where("disciplina", $disciplina)->get();
    
    
    
    
    // verifica se o professor está
    // apto para adicionar sob
    // aquela classe/disciplina
   	if (count($consultaConf))
    {	
      	// verifica se a turma e a disciplina
      	// existem
     	if ((count($consultaTurma)) && (count($consultaDisc)))
        {	
          if (count($consultaConfClasse))
          {
          	
            // verifica se o estudante
          	// existe
         	if (count($consultaEstu))
            {
              
              // verifica se o estudante
              // está matrículado e estudando
              // naquela turma
              if (($consultaEstu->situacao == 5) && ($consultaEstu->turma == $turma))
              {
               		// cadastra a chamada 
              }
            }
          }
        }
    }
    
  }
}

 

Deixei comentado para você analisar de forma mais coerente.

Essa quantidade de if me incomoda.

O que vou precisar fazer é semelhante isso, gostaria de saber se existe uma outra forma de fazer o que foi feito nesse código.

Aceito dicas para melhorar tudo que está ai, faz um dia que iniciei os estudos em laravel. Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou um pouco sem tempo para analisar detalhe por detalhe, mas a primeira coisa que eu faria se fosse você seria trocar todos os 'count' por '->count()' diretamente, sem precisar ficar usando if, no geral várias ifs no seu código são desnecessárias e poderia estar todas em um mesmo.

 

Prometo que quando estiver dia (e eu estiver um pouco mais acordado) vejo se consigo revisar teu código de maneira que fique mais limpo e assim você pode observar e até pensar em maneiras outras maneiras de reduzir.

 

Boa noite.

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 minutos atrás, brcontainer disse:

Estou um pouco sem tempo para analisar detalhe por detalhe, mas a primeira coisa que eu faria se fosse você seria trocar todos os 'count' por '->count()' diretamente, sem precisar ficar usando if, no geral várias ifs no seu código são desnecessárias e poderia estar todas em um mesmo.

 

Prometo que quando estiver dia (e eu estiver um pouco mais acordado) vejo se consigo revisar teu código de maneira que fique mais limpo e assim você pode observar e até pensar em maneiras outras maneiras de reduzir.

 

Boa noite.

Obrigado. O que me mata é não estar acostumado com o mesmo.

De outras formas talvez eu tentaria usar chain of responsibility para percorrer esse tanto de if.

Mas por fim, muito obrigado.

Até já, boa noite.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Frank K Hosaka
      Ontem de madrugada encontrei essa dica javascript - How do I get the value of the selected item in a datalist using pure JS? - Stack Overflow e com ele eu consegui terminar o meu código de paginação. O Laravel já tem um código pronto para ser usado, mas ele é funcional para uma tabela com 150 itens, o meu tem mais de 1500 itens, isso iria entupir a apresentação com um monte de guias. O meu só tem duas guias, o próximo e o anterior. E só lista 10 itens de cada vez.
       
      O mais bacana dessa madrugada é que eu aprendi a usar um pouco mais a  função console.log( ) do JavaScript, procurei exaustivamente uma maneira de obter o número do item da option do datalist, mas foi em vão. A dica que eu encontrei na internet é muito engenhosa, o rapaz encontrou no JavaScript uma função que procura um atributo da option que foi selecionada. Como o option não tem a opção de index, ele sugere criar uma.

      No Controller eu havia pedido para o Laravel trabalhar com os produtos em ordem alfabética, ou seja, a própria consulta já é um index. O único problema foi encontrar um jeito de colocar o index da consulta no option do datalist.

      Com quase tudo resolvido, o problema é fazer o loop do JavaScript funcionar. Graças ao fórum iMasters ou Script Brasil eu consegui uma ajuda. Eu recebi a sugestão de garantir que uma das variáveis dentro do loop do JavaScript seja do tipo inteiro. Eu achei a sugestão um absurdo, mas depois eu lembrei que o mundo dos computadores é bem diferente das abstrações que a gente inventou como os números inteiros e os números reais.
       
      Finalmente, aqui está o código. Ele foi escrito em Blade PHP, não é muito diferente do PHP: a diferença é que ele usa @ ao invés do tradicional <?php >. Nesse projeto pretendo trabalhar com o Bootstrap. Já o class="w600" não é Bootstrap, e sim uma gambiarra que eu fiz onde .w600 {width=600px}. Na imagem que eu deixei, dá para ver que eu ajuntei o nome do produto junto com o código dele, a minha ideia é para o usuário procurar o produto tanto pelo nome bem como pelo código. O datalist é muito bacana, pena que não dá para alterar a fonte e nem fazer a busca semelhante, ou seja, se você digitar "limão", ele não lista se foi cadastrado "limao".

       
      @include('menu') <script> var icontrole document.title='Produto';btmenu.innerHTML='Procurar produto por nome' function controle(comando){ if(comando=="proximo"){ if(icontrole<produtos.options.length){icontrole+=10;show(icontrole)}} if(comando=="anterior"){ if(icontrole>9){icontrole-=10;show(icontrole)}}} function lista(input){ option=Array.prototype.find.call(produto.list.options,function(option){ return option.value === input}) show(option.getAttribute("id"))} function show(j){ j=parseInt(j) divshow.innerHTML="" for(i=j;i<=j+9;i++){ divshow.innerHTML+=produtos.options[i].value+"<br>"} produto.value="" icontrole=j} </script> <div class="w600 m-auto"> <input list=produtos autofocus id=produto onchange=lista(value)> <datalist id=produtos> @foreach($prod as $key=> $pr) <option id={{$key}}>{{$pr->prod}} [{{$pr->codprod}}] @endforeach </datalist></div> <div class="w600 m-auto" id=divshow></div> @if(empty($show)) <script>show(0)</script> @php $show="já começou" @endphp @endif <div class="w600 m-auto"> <input type=submit value=Anterior onclick="controle('anterior')"> <input type=submit value=Próximo onclick="controle('proximo')"> </div>  

    • Por ckcesar
      Pesoal  eu instalei o Laravel em meu pc, mais ao rodar estou enfrentando um erro de permissão. 
      Eu segui os passas da documentação => https://laravel.com/docs/9.x#getting-started-on-windows
       
      Ao entrar no localhost ele retorna esse erro. A lembrando que no docker ele inicial certinho o mysql roda ok, é somente essa pasta storege. Estou tentando resolver mais tudo que eu faço não funfa, estou dando permissão nas pastas, já mudei o arquivo .env e nada.
       
      The stream or file "/var/www/html/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: The stream or file "/var/www/html/storage/logs/laravel.log" 
       

    • Por joeythai
      Boa tarde pessoal,
       
      Eu tenho um foreach que está me trazendo apenas um resultado a partir de uma consulta, mas na verdade tem que me retornar 10 itens:
      <code>
      public function getBillsUnpaid($date)
      {
      $results = [];
      $numberBills = $this->lotModel->select(DB::RAW("
      Lotes.ID AS Lote_ID,
      Compradores.ID as Comprador_ID,
      Compradores.CompradorWeb_ID,
      Compradores.NM as NM_Comprador,
      Lotes.Leilao_ID as Leilao_ID,
      Lotes.NU as NU_Lote,
      FORMAT(lotes.DT_VenctoBoleto, 'yyyy-MM-dd') as DT_VenctoBoleto,
      REPLACE(
      (CASE
      WHEN
      LEN(LTRIM(RTRIM(ISNULL(Compradores.NM_DDDCel,'')))) > 0 AND
      LEN(LTRIM(RTRIM(ISNULL(Compradores.NM_Celular,'')))) > 0
      THEN CONCAT(
      LTRIM(RTRIM(Compradores.NM_DDDCel)),'',
      LTRIM(RTRIM(Compradores.NM_Celular))
      )
      WHEN
      LEN(LTRIM(RTRIM(ISNULL(Compradores.NM_DDDTel,'')))) > 0 AND
      LEN(LTRIM(RTRIM(ISNULL(Compradores.NM_Telefone,'')))) > 0
      THEN CONCAT(
      LTRIM(RTRIM(Compradores.NM_DDDTel)),'',
      LTRIM(RTRIM(Compradores.NM_Telefone))
      )
      ELSE ''
      END)
      ,'-', '') AS NM_Celular,
      Lotes.VL_Venda,
      ISNULL(Lotes.VL_Cobranca, 0) as VL_Cobranca,
      ISNULL((
      SELECT SUM(VL_Cobertura)
      FROM LotesXPagamentos
      WHERE Lote_ID = lotes.ID
      AND Pagamento_ID IS NOT NULL
      ), 0) as VL_Pago,
      CONCAT(Lotes.NM_Descricao, '', Lotes.MM_ExtDescricao) as NM_Descricao
      "))
      ->join('Leiloes', 'Leiloes.ID', '=', 'Lotes.Leilao_ID')
      ->join('Compradores', 'Compradores.ID', '=', 'Lotes.Comprador_ID')
      ->where('Lotes.ST_Lote', 3)
      ->where('Lotes.DT_VenctoBoleto', '>', '2021-03-01')
      ->whereRaw("
      ISNULL((
      SELECT SUM(VL_Cobertura)
      FROM LotesXPagamentos
      WHERE Lote_ID = Lotes.ID
      AND Pagamento_ID IS NOT NULL
      ), 0) = 0")
      ->orderBy('Lotes.NU')
      ->take(10)
      ->get();
      if(count($numberBills) > 0){
      foreach($numberBills as $bills){
      $results['CompradorWeb_ID'] = $bills->CompradorWeb_ID;
      $results['DT_VenctoBoleto'] = $bills->DT_VenctoBoleto;
      $results['VL_Cobranca'] = $bills->VL_Cobranca;
      $results['Lote_ID'] = $bills->Lote_ID;
      $results['Comprador_ID'] = $bills->Comprador_ID;
      $results['NM_Comprador'] = $bills->NM_Comprador;
      $results['NM_Descricao'] = $bills->NM_Descricao;
      $results['VL_Pago'] = $bills->VL_Pago;
      $results['NU_Lote'] = $bills->NU_Lote;
      $results['Leilao_ID'] = $bills->Leilao_ID;
      $phones = $this->getPhoneUsers($bills->CompradorWeb_ID);
      $results['NM_Celular'] = (!is_null(@$phones->fone_celular)) ? $phones->fone_celular : $bills->NM_Celular;
      return $results;
      }
      }
      }
      </code>
       
      Se eu retorno somente a variavel $numberBills, ele me traz o resultado certinho, porém, eu não posso retornar essa variavel pq preciso pegar o resultado dela e chamar a minha outra função que faz conexão com outra base de dados e por isso eu criei esse array result, percebam que o numero do telefone vai vir da minha tabela A(função que pega o telefone) e caso não tenha o telefone nela, eu pego o numero da tabela B(resultado dessa query) porem qdo do return $results, so me retorna o primeiro registro, o que estou fazendo de errado ?
    • Por joeythai
      Boa tarde pessoal,
       
      Eu tenho um foreach que está me trazendo apenas um resultado a partir de uma consulta, mas na verdade tem que me retornar 10 itens:
      <code>
      public function getBillsUnpaid($date)
      {
      $results = [];
      $numberBills = $this->lotModel->select(DB::RAW("
      Lotes.ID AS Lote_ID,
      Compradores.ID as Comprador_ID,
      Compradores.CompradorWeb_ID,
      Compradores.NM as NM_Comprador,
      Lotes.Leilao_ID as Leilao_ID,
      Lotes.NU as NU_Lote,
      FORMAT(lotes.DT_VenctoBoleto, 'yyyy-MM-dd') as DT_VenctoBoleto,
      REPLACE(
      (CASE
      WHEN
      LEN(LTRIM(RTRIM(ISNULL(Compradores.NM_DDDCel,'')))) > 0 AND
      LEN(LTRIM(RTRIM(ISNULL(Compradores.NM_Celular,'')))) > 0
      THEN CONCAT(
      LTRIM(RTRIM(Compradores.NM_DDDCel)),'',
      LTRIM(RTRIM(Compradores.NM_Celular))
      )
      WHEN
      LEN(LTRIM(RTRIM(ISNULL(Compradores.NM_DDDTel,'')))) > 0 AND
      LEN(LTRIM(RTRIM(ISNULL(Compradores.NM_Telefone,'')))) > 0
      THEN CONCAT(
      LTRIM(RTRIM(Compradores.NM_DDDTel)),'',
      LTRIM(RTRIM(Compradores.NM_Telefone))
      )
      ELSE ''
      END)
      ,'-', '') AS NM_Celular,
      Lotes.VL_Venda,
      ISNULL(Lotes.VL_Cobranca, 0) as VL_Cobranca,
      ISNULL((
      SELECT SUM(VL_Cobertura)
      FROM LotesXPagamentos
      WHERE Lote_ID = lotes.ID
      AND Pagamento_ID IS NOT NULL
      ), 0) as VL_Pago,
      CONCAT(Lotes.NM_Descricao, '', Lotes.MM_ExtDescricao) as NM_Descricao
      "))
      ->join('Leiloes', 'Leiloes.ID', '=', 'Lotes.Leilao_ID')
      ->join('Compradores', 'Compradores.ID', '=', 'Lotes.Comprador_ID')
      ->where('Lotes.ST_Lote', 3)
      ->where('Lotes.DT_VenctoBoleto', '>', '2021-03-01')
      ->whereRaw("
      ISNULL((
      SELECT SUM(VL_Cobertura)
      FROM LotesXPagamentos
      WHERE Lote_ID = Lotes.ID
      AND Pagamento_ID IS NOT NULL
      ), 0) = 0")
      ->orderBy('Lotes.NU')
      ->take(10)
      ->get();
      if(count($numberBills) > 0){
      foreach($numberBills as $bills){
      $results['CompradorWeb_ID'] = $bills->CompradorWeb_ID;
      $results['DT_VenctoBoleto'] = $bills->DT_VenctoBoleto;
      $results['VL_Cobranca'] = $bills->VL_Cobranca;
      $results['Lote_ID'] = $bills->Lote_ID;
      $results['Comprador_ID'] = $bills->Comprador_ID;
      $results['NM_Comprador'] = $bills->NM_Comprador;
      $results['NM_Descricao'] = $bills->NM_Descricao;
      $results['VL_Pago'] = $bills->VL_Pago;
      $results['NU_Lote'] = $bills->NU_Lote;
      $results['Leilao_ID'] = $bills->Leilao_ID;
      $phones = $this->getPhoneUsers($bills->CompradorWeb_ID);
      $results['NM_Celular'] = (!is_null(@$phones->fone_celular)) ? $phones->fone_celular : $bills->NM_Celular;
      return $results;
      }
      }
      }
      </code>
       
      Se eu retorno somente a variavel $numberBills, ele me traz o resultado certinho, porém, eu não posso retornar essa variavel pq preciso pegar o resultado dela e chamar a minha outra função que faz conexão com outra base de dados e por isso eu criei esse array result, percebam que o numero do telefone vai vir da minha tabela A(função que pega o telefone) e caso não tenha o telefone nela, eu pego o numero da tabela B(resultado dessa query) porem qdo do return $results, so me retorna o primeiro registro, o que estou fazendo de errado ?
       
    • Por zanoth
      Salve galera,
       
      sou novo no fórum, saudacoes a todos.
       
      Tenho um formulario em blade:
       
      <form action="{{url('request-action')}}" method="post"> Uma rota:
       
      Route::post('request-action', [Controllers\MainController::class, 'validator']);  
      E um Controller, com a funcao:
      public function validator(Request $request) { $data = $request->validate([ 'name' => 'required|max:255', 'email' => 'sometimes|email', 'phone' => 'required|max:255', 'units' => 'required', 'done' => 'required', ]); tap(new Clients($data))->save(); $id = DB::table('clients')->where('email', '=', $request->email); var_dump($id); //DEBUG for($i = 0; $i < $request->units; $i++) { $banch = file(storage_path('tickets.txt')); $len_banch = count($banch); $rand = rand(0, $len_banch-1); $got = $banch[$rand]; unset($banch[$rand]); $file = fopen(storage_path('tickets.txt'), "w"); ftruncate($file, sizeof($banch)); file_put_contents(storage_path('tickets.txt'), $banch); fclose($file); $tickets->token = $got; $tickets->id = $id; $tickets->save(); } fclose($file);*/ return redirect('success'); }  
      Quero que o formulario seja validado e os dados sejam salvos no bd. Nessa funcao instancio dois modelos, um deles levando o valor de um indice automatico do outro. (em $tickets->id = $id;). Em uma pesquisa rapida descobri a classe DB (Illuminate\Support\Facades\DB), mas sem resultado, considerando que esse valor é gerado no ato da interacao com o Postgres (no meu caso).
      Qual seria a melhor de maneira para traze-lo?
       
      Com relacao aos logs, a principio uma inconsistencia relacionada a variavel $id foi retornada pelo debugger, porem agora nem sequer o debugger é chamado, em decorrencia de um loop infinito aparentemente (pagina sendo carregada… etc etc). A que se deve tal comportamento?
       
      Seguindo os exemplos dos corteses, crio esse post. Ja se isso for mentira, obra do diabo ou de alguma sociedade secreta que o serve, que alguem fale agora ou cale-se para sempre, por favor. Estes sxerao castigados, vencida a ilusao da vida.
       
      Uma outra duvida seria em relacao ao real funcionamento da funcao (helper) 'tap', nao encontro documentacoes ou manuais tecnicos em essencia,
       
       
      mas informacoes textuais ou artigos, que facilitam a abstracao.
       
      Valeu desde já.
       
×

Informação importante

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