[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Jean Silva
Criador Jean Silva 16/09/2022

Olá Professor, bom dia!

Me ajuda por favor?.

Eu gostaria de usar uma das funções do laravel a qual estava lendo, uma delas é o syncPivot e a outra attach.

O cenário é que eu tenho uma tabela moviments e nessa tabela moviments eu preciso inserir no momento do store um outro cadastro (tipo log) em outra tabela chamada cart, a qual essa tabela intermediária têm um fk moviments_id, tentei usar o syncPivot da seguinte forma:

Erros:

https://pasteboard.co/rnFhOiDH570j.jpg

ORA-00942: table or view does not exist

Validator::validateCart does not exist

MovimentController.php

    public function store(StoreMovimentRequest $request)
    {
        $this->authorize('create', Moviment::class);
        $moviment = Moviment::create($request->validated());
        $moviment->cart()->syncWithPivotValues($request->input('cart', []), ['user_id' => auth()->id()]);
        return new MovimentResource($moviment);
    }

Model -> Moviment.php


    public function Cart() {
        return $this->belongsToMany(Cart::class)->withTimestamps()->withPivot(['user_id']);
    }

StoreMovimentRequest.php

public function rules()
    {
        return [
            'people_id'            => ['required'],
            'company_id'           => ['required'],
            'vehicle_id'           => ['required'],
            'departaments_id'      => ['required'],
            'documents_id'         => ['required'],
            'cart'                 => ['cart']
        ];
    }

 

 

 

 

Manager Carlos Ferreira 16/09/2022

Olá, Jean!
Tudo bem?

O método sync vai sincronizar os dados, ou seja, se já tiver algo na tabela pivô e você enviar um array vazio, vai limpar a tabela, porque sincronizou ela.

Se usar o método sync, será necessário sempre pegar os dados que já tinha na tabela pivô para não perder no momento de sincronizar.

--

Você tem o código no GitHub? Eu preciso de mais detalhes para conseguir te ajudar.

Carlos Ferreira
Criador Jean Silva 16/09/2022

Olá Professor, bom dia!

Tudo bem?.

Então, é como se fosse uma tabela de log, eu tenho um forms nesse forms eu preciso popular duas tabelas, sendo a tabela A e tabela B, na tabela A é aonde eu tenho todos os dados do objeto já trazendo as informações de outras fks, na tabela B é aonde eu vou pegar o id da tabela A e popular na tabela B, portanto isso tudo na mesma request.

Tentei fazer assim, mas ele popula apenas a tabela A, não consigo entender muito bem esse conceito do attach.


    public function store(StoreMovimentRequest $request)
    {
        $this->authorize('create', Moviment::class);
        $moviment = Moviment::create($request->validated());
        $moviment->CartMoviment()->attach($moviment->id);
        return new MovimentResource($moviment);
    }

Model

    public function CartMoviment() {
        return $this->belongsTo(CartMoviment::class);
    }

 

 

 

 

Jean Silva
Manager Carlos Ferreira 16/09/2022

O método attach é usado para vincular registros em relações Many To Many (N:N), no seu caso tem uma relação N:1 (belongsTo)

Recomendação de curso: https://academy.especializati.com.br/curso/laravel-banco-de-dados-relacional

Carlos Ferreira
Criador Jean Silva 16/09/2022

De certo professor, obrigado.

Jean Silva
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!