belongsTo - Dúvida

Marcos Birro Calixto Criador 14/05/2018
Marcos Birro Calixto

Bom dia. Por favor, veja se pode me ajudar com isso.

Fiz o relacionamento gestor para muitos centrosdelucro e funcionou ok.

Agora preciso do contrário. Pegar o centro de luro e associar (muitos) para um (gestor)

Minha model centrolucro

    public function gestor()

    {

        return $this->belongsTo(Gestor::class);

    }

Controller Centro Lucro

    public function index()

    {

        $centrocustos = Centrocusto::All();

        foreach($centrocustos as $centrocusto) 

        {

            $gestors = $centrocusto->gestor()->get();

        }

 

        return view('admin.cadastros.centrocusto.index', compact('centrocustos', 'gestors'));

    }

Index

        @foreach($centrocustos as $centrocusto)

        <tr>

            <td>{{$centrocusto->codigo}}</td>

            <td>{{$centrocusto->descricao}}</td>

            <td>

                @foreach ($gestors as $gestor)

                    {{ $gestor->nome }}

                @endforeach                

            </td>    

            <td><span class="label label-primary">Ativo</span></td>

            <td></td>

            <td><a href="{{url("/centrocusto/$centrocusto->id/edit")}}">Editar</a> |

            <a href="{{url("/centrocusto/$centrocusto->id")}}">Exclui</a></td>

        </tr>

        @endforeach  

Criador Marcos Birro Calixto 14/05/2018
Marcos Birro Calixto

Carlos, boa tarde.
Vendo a aula seguinte eu coloquei o with e trouxe tudo conforme seu exemplo. Então meu controller ficou assim

    public function index()

    {

        $centrocustos = Centrocusto::where('codigo', 'LIKE', '%4%')->with('gestor')->get();

        foreach($centrocustos as $centrocusto)

        {

               $gestors = $centrocusto->gestor();

        }

        return view('admin.cadastros.centrocusto.index', compact('centrocustos', 'gestors'));

    }

Mas não consigo mostrar no view o gestor->nome

Criador Marcos Birro Calixto 14/05/2018
Marcos Birro Calixto

Eu fiz os testes no Controller e funciona perfeitamente.

MAs na VIEW só mostra o último gestor e não o relacionado.

            <td>

                @foreach ($gestores as $gestor)

                    @if ( count($gestores) > 0) 

                    {{ $gestor->nome }}<br>

                    @else

                    {{ $gestor->nome }}

                    @endif

                @endforeach

            </td>

Manager Carlos Ferreira 14/05/2018
Carlos Ferreira

Olá, Marcos!

O método belongsTo() é usado para relacionamentos Many to One.

Para relacionar Many to Many o método correto é: belongsToMany()

Mas, quero reforçar que o relacionamento Many to Many só é quando tem uma tabela pivô.

A lógica que criou no controller ficou errada.
Quando cria uma variável dentro de um loop de repetição só vai pegar o valor do último loop...
Não precisa fazer o loop no controller.

Veja como fica:
public function index()
{

    $centrocustos = Centrocusto::where('codigo', 4)->with('gestor')->get();

    $gestors = $centrocusto->gestor;

    return view('admin.cadastros.centrocusto.index', compact('centrocustos', 'gestors'));

}

Agora um favor que quero te pedir, quando for abrir tickets, com por exemplo relacionados a relacionamentos de tabelas, abre em uma aula semelhante, porque ajuda outros alunos com a mesma dúvida! :-)

Qualquer dúvida só me retornar.

Abs;

Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!