Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Buscar sem e com chave estrangeira.

Boa tarde, estava fazendo umas implementações nova no laravel 5.0 depois que fiz os cursos queria tirar uma dúvida.

Eu consegui fazer o buscar sem chave estrangeira, porém com a chave estrangeira ele da erro na tabela, vou postar o código.

Sem chave estrangeira

public function listaragencia(){
        $agencia = Request::only('nome');
        $agencia = $agencia['nome'];
        $agencias = DB::table('agenciafomento')->where('nome', 'ilike', $agencia)->get();
        return view ('administrador.agenciafomento')->with('agenciafomento', $agencias);
    }

Código da pagina

@extends('layout.principal')

@section('conteudo')
<h3 style="text-align:center">Agências de Fomento</h3>
<hr>

<div>
    <a href="/administrador/cadastraragencia" class="btn btn-primary"><span class="glyphicon glyphicon-plus"></span> Cadastrar</a>
</div>

<h2 style="text-align:center;">Digite o nome da Agência de Fomento</h3>
<form class='col-md-12' method='post' action="/administrador/listaragencia">
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />

    <div class='input-group' style='width:340px;text-align:center;margin:0 auto;'>
        <input type='text' class='form-control' name="nome" placeholder='Digite o nome'><br><br>

        <button type="submit" class="btn btn-primary">Buscar</button><br><br>
        <a href="/administrador/agenciafomento" class="btn btn-default">Listar todas as Agências</a><br><br>
    </div>
</form>

<br><br><br>

<table class="table table-striped table-bordered table-hover">
    <tr>
        <th>ID</th>
        <th>Nome</th>
        <th>Editar</th>
        <th>Excluir</th>
    </tr>

    @forelse($agenciafomento as $af)
        <tr>
              <td>{{ $af->id }}</td>
            <td>{{ $af->nome }}</td>
            <td> 
                  <a href="/administrador/editaragencia/{{$af->id}}"> 
                    <span class="glyphicon glyphicon-pencil"></span>
                  </a>
            </td>

            <td> 
                <a href="#" class="glyphicon glyphicon-trash" data-toggle="modal" data-target="#{{$af->id}}"></a>
                  <div id="{{$af->id}}" class="modal fade" role="dialog">
                      <div class="site-wrapper">
                          <div class="modal-dialog">                  
                            <div class="modal-content">
                                  <div class="modal-header">
                                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                                    <h4 class="modal-title">Agência de fomento.</h4>
                                  </div>

                                  <div class="modal-body">
                                    <p>Deseja excluir a agência de fomento: {{$af->nome}}</p>
                                  </div>

                                  <div class="modal-footer">
                                    <a href="/administrador/deletaragencia/{{$af->id}}" class="btn btn-primary">Sim</a>
                                    <a href="#" class="btn btn-default" data-dismiss="modal">Não</a>
                                  </div>
                            </div>
                        </div>
                      </div>
                </div>
            </td>
         </tr>
    @empty<br><br><br><br>
        <div class="alert alert-danger">
            Você não tem nenhuma agência de fomento cadastrada ou não existe!.
          </div>
      @endforelse
</table>

@if(old('nome'))
    <div class="alert alert-success">
        <strong>Sucesso!</strong> 
          A agência de fomento, {{ old('nome') }} foi cadastrada.
      </div>
@endif
@stop

Como pode ver eu fiz um form lá em cima para direcionar para outro controller. Sem a chave estrangeira ele funciona já com a chave estrangeira ela não funciona

Exemplo com chave estrangeira que é instituição

@extends('layout.principal')

@section('conteudo')
<h3 style="text-align:center">Usuários</h3>
<hr>
<div>
    <a href="/administrador/cadastrarusuario" class="btn btn-primary"><span class="glyphicon glyphicon-plus"></span> Cadastrar</a><br><br>
</div>

<h2 style="text-align:center;">Digite o nome do Usuário</h3>

<form class='col-md-12' method='post' action="/administrador/listarusuario">
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />

    <div class='input-group' style='width:340px;text-align:center;margin:0 auto;'>
        <input type='text' class='form-control' name="nome" placeholder='Digite o nome'><br><br>

        <button type="submit" class="btn btn-primary">Buscar</button><br><br>
        <a href="/administrador/usuario" class="btn btn-default">Listar todos os Usuários</a><br><br>
    </div>
</form>

<br><br><br>

<table class="table table-striped table-bordered table-hover">
    <tr>
          <th>ID</th>
          <th>Nome</th>
          <th>Email</th>
          <th>Instituição</th>
          <th>Acesso</th>
          <th>Editar</th>
          <th>Excluir</th>
    </tr>

    @forelse($user as $u)
        <tr>
              <td>{{ $u->id }}</td>
              <td>{{ $u->name }}</td>
              <td>{{ $u->email }}</td>
              <td>{{ $u->instituicao->nome }}</td>
              <td>{{ $u->acesso }}</td>
            <td> 
                  <a href="/administrador/editarusuario/{{$u->id}}"> 
                    <span class="glyphicon glyphicon-pencil"></span>
                  </a>
            </td>

            <td> 
                   <a href="{{$u->id}}" class="glyphicon glyphicon-trash" data-toggle="modal" data-target="#{{$u->id}}"></a>
                  <div id="{{$u->id}}" class="modal fade" role="dialog">
                      <div class="site-wrapper">
                          <div class="modal-dialog">                  
                            <div class="modal-content">
                                  <div class="modal-header">
                                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                                    <h4 class="modal-title">Usuário.</h4>
                                  </div>
                                  <div class="modal-body">
                                    <p>Deseja excluir o usuário: {{$u->name}}</p>
                                  </div>
                                  <div class="modal-footer">
                                    <a href="/administrador/deletarusuario/{{$u->id}}" class="btn btn-primary">Sim</a>
                                    <a href="/administrador/usuario" class="btn btn-default" data-dismiss="modal">Não</a>
                                  </div>
                            </div>
                        </div>
                      </div>
                </div>
            </td>
          </tr>
    @empty<br><br><br><br>
        <div class="alert alert-danger">
            Você não tem nenhum usuário cadastrado ou não existe!.
          </div>
      @endforelse
</table>

@if(old('nome'))
  <div class="alert alert-success">
    <strong>Sucesso!</strong> 
      O usuário, {{ old('nome') }} foi cadastrado.
  </div>
@endif
@stop

Código para gerar a tabela com nome que deseja buscar.

public function listarusuario(){
        $usuario = Request::only('nome');
        $usuario = $usuario['nome'];
        $usuarios = DB::table('users')->where('name', 'ilike', $usuario)->get();
        return view ('administrador.usuario')->with('user', $usuarios);
    }

OBS: Minha dúvida se existe outras maneiras de fazer consultas ainda mais com chave estrangeira até porque eles já estão mapeados no model e tenho tabelas que trazem maneira correta as informações das tabelas, porém na hora de buscar um usuário específico a view não chega nem de retornar e não mostra nada.

4 respostas

Tentei fazer dessa maneira


    public function listarusuario(){
        $usuario = Request::only('nome');
        $usuario = $usuario['nome'];
        $usuarios = DB::table('users')
        ->join('instituicao', 'users.instituicao_id', '=', 'instituicao.id')
        ->where('name', 'ilike', $usuario)->get();
        return view ('administrador.usuario')->with('user', $usuarios)->with('instituicao', $instituicao = Instituicao::all());
    }

Olá Yuri, quando você usa o metodo with ele carrega o relacionamento direto entre elas com uma nova query com join, porem se você quiser fazer um where nesse join você tem duas formas primeira forma seria o with receber um array assim

With(['relacionamento'=>function($query) use ($parâmetro) {
$query->where('algo',$parâmetro);
}])

OU pelo campo especifico

With('Relacionamento.campo',$parâmetro)

Espero ter ajudado https://laravel.com/docs/5.0/eloquent#eager-loading

Seria assim no caso?

    public function listarusuario(){
        $usuario = Request::only('nome');
        $usuario = $usuario['nome'];
        $usuarios = DB::table('users')
        ->join('instituicao', 'users.instituicao_id', '=', 'instituicao.id')
        ->where('name', 'ilike', $usuario)->get();
        return view ('administrador.usuario')->with('user', $usuarios)->with('instituicao.nome', $instituicao = Instituicao::all());
    }
solução!

Consegui assim.

public function listarusuario(){
        $usuario = Request::only('nome');
        $usuario = $usuario['nome'];
        $usuarios = User::with('instituicao')->where('name', 'ilike', '%'.$usuario.'%')->get();
        return view ('administrador.usuario')->with('user', $usuarios);
    }