10
respostas

Como mudar o nome do botão caso usuário tenha feito cadastro ?

Boa noite, gostaria de colocar tipo um aviso no botão caso usuário tenha feito tal cadastro no meu caso tenha feito renovação, usuário entra no card e nota que já fez a inscrição o nome do botão muda e esteja escrito "inscrito"...

--- Controller store que salva, e listar dados que joga os dados para o formulario

 public function listardados(){
        $matricula = Matricula::where('user_id', Auth::id())->get();

        //dd($matricula);
        return view('dashboard.renovacao.teste', compact( 'matricula'));
    }

    public function store(RenovacaoRequest $request){


        $user = Auth()->user();

        $dados = $request->get('rematricula');

        foreach ($dados as $key => $dado) {

            Renovacao::create($dado);
        }




        return view('dashboard.renovacao.confirmacao', compact ('renovacao'));
    }

--- Form

@extends('layouts.app') @section('content')

<div class="container">
    <div class="row">

        <form class="form-horizontal " id="regForm" action="{{route('renovacao.store')}}" method="POST">
            <div class="card-panel white">
                <h4 class="center">Solicitar Renovação</h4>
                <div class="row"></div>
                {{ csrf_field()}}

                <div class="row">
                    @if($matricula->count())
                        <right>
                            <a>**Dados Cadastrados**</a>
                        </right>
                        <div class="row"></div>
                        <div class="row"></div>
                        @foreach($matricula as $matric)

                            <div class="row">
                                <div class="col s6 m6">
                                <div class="input-field {{$errors->has('') ? 'has-error' : ''}} ">
                                    <label for="produto">Nome do Pai:</label>
                                    <input type="text" class="form-control" name="rematricula[{{ $loop->index}}][nomerespo]" value="{{ $matric->nomedopai }}">
                                </div>
                                </div>

                                <div class="col s6 m6">
                                <div class="input-field {{$errors->has('') ? 'has-error' : ''}} ">
                                    <label for="produto">Nome do Aluno(a):</label>
                                    <input type="text" class="form-control" name="rematricula[{{ $loop->index}}][nomealuno]" value="{{ $matric->nomealuno }}">
                                </div>
                                </div>

                            </div>

                        @endforeach
                        <div class="col s12 m6">
                            <div class="row"></div>
                            <div class="row"></div>
                            <div class="row">
                                <div>
                                    <div class="card-panel white ">
                                        <b class="black-text">AVISO? </b></br></br>
                                        <span>• Mensagem de Aviso </span></br></br>

                                    </div>
                                </div>
                            </div>
                            <div class="row">
                            </div>
                        </div>


                        <div class = "row">
                            <div class="col s12">

                                <a title="Voltar Para Página Principal" class="btn orange darken-4 btn-info left " href="/admin">Voltar
                                    <i class="material-icons left">arrow_back_ios</i>
                                </a>

                                <button type="submit" class="btn orange darken-4 btn-info right">Confirmar
                                    <i class="material-icons left">save</i>
                                </button>
                            </div>
                        </div>
                    @else
                        <div class="row"></div>
                        <div class="row"></div>
                        <p> Desculpe! Página Indisponivel, Você não tem cadastro nessa instituição, Procure a secretaria e faça sua Matrícula </p>
                        <div class="row"></div>
                        <div class="row"></div>
                        <div class="row"></div>
                        <div class="row"></div>
                        <a title="Voltar Para Página Principal" class="btn orange darken-4 btn-info left " href="/admin">Voltar
                                    <i class="material-icons left">arrow_back_ios</i>
                        </a>
                    @endif



                </div>
            </div>    
        </form>
    </div>
</div>
@endsection
10 respostas

Oi Elyton, tudo bom?

Qual botão você quer que mude?

Compartilha com a gente também o conteúdo da sua classe Matricula e Usuario?

O ideal é que exista um relacionamento entre as duas e você acesse esse relacionamento na view e verifique se ele está vazio ou não. Se não estiver vazio você pode mostrar o texto "inscrito"

Sim, existe relacionamento entre a tabela user e matricula, bom queria mudar o nome do botão confirmar, assim o usuário não precisa fazer o cadastro duplicado a não ser que adm delete do registro na aba de relatório, ai voltaria o botão confirmar e sumia o botão invisível escrito "inscrito"

--- Class Matricula

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Matricula extends Model
{
    protected $table = 'matricula';
    protected $fillable = ['user_id','nomealuno','sexo','serieano','datanascimento', 'naturalidade', 'uf', 'quantdirmao','cor','endereço','numero','cep','bairro','nomedopai'];




    public function user() {
        return $this->belongsTo('App\User');
    }    
}

--- Class User

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Notifications\ResetPassword;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password','prematricula_id',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function matricula() {
            return $this->belongsTo('App\Matricula');
    }

    public function sendPasswordResetNotification($token) {

            $this->notify(new ResetPassword($token));
    }


}

Você tem um exemplo de como ficaria ? Eu sei que passaria ele como false e dentro do foreach trataria essa validação

Oi Elyton, tudo bom? =)

Já que a entidade Matricula não tem um relacionamento com Rematricula, você precisaria buscar essa rematricula no banco antes de carregar a tela.

O ideal aqui seria criar um relacionamento entre Matricula e Rematricula, assim, a gente conseguiria acessar a rematricula direto da entidade matricula já disponivel na tela =)

A ideia, seria acessar algo como:

// verifica se não tem rematricula
@if(empty($matricula->getRematricula()))
    <button type="submit" class="btn orange darken-4 btn-info right">Confirmar
                                    <i class="material-icons left">save</i>
                                </button>
@else
// seu botão com o texto diferente =)
@endif

Fiz isso só que agora o botão fica inativo automaticamente, ele pega o registro da tabela matricula automaticamente e não da tabela renovação

Print: http://prntscr.com/lqkigt

-- Model matricula

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Matricula extends Model
{
    protected $table = 'matricula';
    protected $fillable = ['user_id','nomealuno','sexo','serieano','datanascimento','endereço','numero','cep','bairro','nomedopai'];

    public function user() {
        return $this->belongsTo('App\User');
    }

    public function renovacao() {
        return $this->belongsTo('App\Renovacao');
    }    
}

-- Model renovação

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Renovacao extends Model
{
    protected $table = 'renovacao';
    protected $fillable = ['nomerespo','nomealuno','status'];

    public function matricula() {
        return $this->belongsTo('App\Matricula');
    }
}

--- Renovação controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
use App\Renovacao;
use App\Matricula;
use Illuminate\Support\Facades\Auth;
use App\Http\Requests\RenovacaoRequest;
class RenovacaoController extends Controller
{
    public function index()
    {
        return view('dashboard.renovacao.index');
    }

//  Pega o user_id do usuário logado e joga no formulário os dados cadastrado 
    public function listardados(){
        $matricula = Matricula::where('user_id', Auth::id())->get();

        //dd($matricula);
        return view('dashboard.renovacao.teste', compact( 'matricula'));
    }

//Função que salva os dados do form na tabela renovação
    public function store(RenovacaoRequest $request){


        $user = Auth()->user();

        $dados = $request->get('rematricula');

        foreach ($dados as $key => $dado) {

            Renovacao::create($dado);
        }
        return view('dashboard.renovacao.confirmacao', compact ('renovacao'));
    }
}

-- Form

@extends('layouts.app') @section('content')

<div class="container">
    <div class="row">

        <form class="form-horizontal " id="regForm" action="{{route('renovacao.store')}}" method="POST">
            <div class="card-panel white">
                <h4 class="center">Solicitar Renovação</h4>
                <div class="row"></div>
                {{ csrf_field()}}

                <div class="row">
                    @if($matricula->count())
                        <right>
                            <a>**Dados Cadastrados**</a>
                        </right>
                        <div class="row"></div>
                        <div class="row"></div>
                        @foreach($matricula as $matric)

                            <div class="row">
                                <div class="col s6 m6">
                                <div class="input-field {{$errors->has('') ? 'has-error' : ''}} ">
                                    <label for="produto">Nome do Pai:</label>
                                    <input type="text" class="form-control" name="rematricula[{{ $loop->index}}][nomerespo]" value="{{ $matric->nomedopai }}">
                                </div>
                                </div>

                                <div class="col s6 m6">
                                <div class="input-field {{$errors->has('') ? 'has-error' : ''}} ">
                                    <label for="produto">Nome do Aluno(a):</label>
                                    <input type="text" class="form-control" name="rematricula[{{ $loop->index}}][nomealuno]" value="{{ $matric->nomealuno }}">
                                </div>
                                </div>

                            </div>

                        @endforeach
                        <div class="col s12 m6">
                            <div class="row"></div>
                            <div class="row"></div>

                        <div class = "row">
                            <div class="col s12">

                                <a title="Voltar Para Página Principal" class="btn orange darken-4 btn-info left " href="/admin">Voltar
                                    <i class="material-icons left">arrow_back_ios</i>
                                </a>

                                @if(empty($matric->renovacao()))
                                    <button type="submit" class="btn orange darken-4 btn-info right">Confirmar
                                        <i class="material-icons left">save</i>
                                    </button>
                                @else
                                    <button type="submit" disabled class="btn orange darken-4 btn-info right">Inscrito
                                            <i class="material-icons left">confirmation_number</i>
                                    </button>
                                @endif    
                            </div>
                        </div>
                    @else
                        <div class="row"></div>
                        <div class="row"></div>
                        <p> Desculpe! Página Indisponivel, Você não tem cadastro nessa instituição, Procure a secretaria e faça sua Matrícula </p>
                        <div class="row"></div>
                        <div class="row"></div>
                        <div class="row"></div>
                        <div class="row"></div>
                        <a title="Voltar Para Página Principal" class="btn orange darken-4 btn-info left " href="/admin">Voltar
                                    <i class="material-icons left">arrow_back_ios</i>
                        </a>
                    @endif    
                </div>
            </div>    
        </form>

Ta certo esse model ? ou tenho que adicionar algo no migration também ?

Oi Elyton, perdão pela demora.

Acho que temos um problema no relacionamento entre Renovacao e Matricula, já que ambos são belongsTo (pertence a).

Pela regra de mapeamento do Eloquent, a gente precisa dizer quem contem e quem pertence a quem. Aqui a ideia seria dizer que uma Matricula tem uma (ou muitas, dependendo da sua regra de negocio) Renovacao e uma renovacao pertence a uma matricula

Ou seja, a classe Renovacao esta certa pois é "pertencido" mas a Matricula precisa indicar que contem renovações (com hasOne/hasMany)

aqui na documentacão você encontra mais detalhes sobre os mapeamentos do Eloquent =)

Tendo o mapeamento certinho, você pode acessar todas as renovações de uma matricula (ou a renovação, caso seja OneToOne) e fazer a verificação na view pra exibir o botão

Bom fiz alterações

Eu acho que o problema deve ser o relacionamento o usuário pode ter varias matricula(Ex: 3 filhos) e nele ele pode fazer renovação na quantidade de filhos cadastrados, relacionamento sempre foi meu ponto fraco kkkkk

Depois que fiz as alterações na tabela eu usei o comando no form @if(empty($matric->renovacao()->first())) para verificar se existe registro ele retornou esse erro

SQLSTATE[42703]: Undefined column: 7 ERROR: column renovacao.matricula_id does not exist LINE 1: select * from "renovacao" where "renovacao"."matricula_id" =... ^ (SQL: select * from "renovacao" where "renovacao"."matricula_id" = 1 and "renovacao"."matricula_id" is not null limit 1)

Coloquei a model e o formulário dessa forma

--- Model matricula

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Matricula extends Model
{
    protected $table = 'matricula';
    protected $fillable = ['user_id','nomealuno','sexo','serieano','datanascimento', 'naturalidade', 'uf', 'quantdirmao','cor','endereço','numero','cep','bairro','nomedopai','contatodopai','nomedamae','contatodamae','numRG','orgaoexpedidor','dataexpedicao','cpf','dataMatricula','alunoBolsaFamlia'];



    public function user() {
        return $this->belongsTo('App\User');
    }    

    public function renovacao() {
        return $this->hasOne('App\Renovacao'); // Aqui tentei até colocar o hasMany só que o erro continuava
    } 
}

--- Model Renovação

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Renovacao extends Model
{
    protected $table = 'renovacao';
    protected $fillable = ['nomerespo','nomealuno','status'];


    public function matricula() {
        return $this->belongsTo('App\Matricula');
    }
}

--- form

<form class="form-horizontal " id="regForm" action="{{route('renovacao.store')}}" method="POST">
            <div class="card-panel white">
                <h4 class="center">Solicitar Renovação</h4>
                <div class="row"></div>
                {{ csrf_field()}}

                <div class="row">
                    @if($matricula->count())
                        <right>
                            <a>**Dados Cadastrados**</a>
                        </right>
                        <div class="row"></div>
                        <div class="row"></div>
                        @foreach($matricula as $matric)

                            <div class="row">
                                <div class="col s6 m6">
                                <div class="input-field {{$errors->has('') ? 'has-error' : ''}} ">
                                    <label for="produto">Nome do Pai:</label>
                                    <input type="text" class="form-control" name="rematricula[{{ $loop->index}}][nomerespo]" value="{{ $matric->nomedopai }}">
                                </div>
                                </div>

                                <div class="col s6 m6">
                                <div class="input-field {{$errors->has('') ? 'has-error' : ''}} ">
                                    <label for="produto">Nome do Aluno(a):</label>
                                    <input type="text" class="form-control" name="rematricula[{{ $loop->index}}][nomealuno]" value="{{ $matric->nomealuno }}">
                                </div>
                                </div>

                            </div>

                        @endforeach
                        <div class="col s12 m6">
                            <div class="row"></div>
                            <div class="row"></div>
                            <div class="row">
                                <div>
                                    <div class="card-panel white ">
                                        <b class="black-text">AVISO? </b></br></br>
                                        <span>• Aviso</span></br></br>

                                    </div>
                                </div>
                            </div>
                            <div class="row">
                            </div>
                        </div>


                        <div class = "row">
                            <div class="col s12">

                                <a title="Voltar Para Página Principal" class="btn orange darken-4 btn-info left " href="/admin">Voltar
                                    <i class="material-icons left">arrow_back_ios</i>
                                </a>

                                @if(empty($matric->renovacao()->first()))
                                    <button type="submit" class="btn orange darken-4 btn-info right">Confirmar
                                        <i class="material-icons left">save</i>
                                    </button>
                                @else
                                    <button type="submit" disabled class="btn orange darken-4 btn-info right">Inscrito
                                            <i class="material-icons left">confirmation_number</i>
                                    </button>
                                @endif
                            </div>
                        </div>
                    @else
                        <div class="row"></div>
                        <div class="row"></div>
                        <p> Desculpe! Página Indisponivel, Você não tem cadastro nessa instituição </p>
                        <div class="row"></div>
                        <div class="row"></div>
                        <div class="row"></div>
                        <div class="row"></div>
                        <a title="Voltar Para Página Principal" class="btn orange darken-4 btn-info left " href="/admin">Voltar
                                    <i class="material-icons left">arrow_back_ios</i>
                        </a>
                    @endif



                </div>
            </div>    
        </form>

Será que não precisa fazer relacionamento com a tabela usuário também ?

continuação do tópico:

https://cursos.alura.com.br/forum/topico-como-desabilitar-botao-caso-usuario-ja-tenha-feito-o-cadastro-74417