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

Relacionamentos com Eloquent - Dúvidas.

Boa noite a todos,

estou tentando implementar um relacionamento na modelagem, porem esta dando o seguinte erro:

2/2
ErrorException in Model.php line 2642:
Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation (View: C:\xampp\htdocs\gestorclinica\resources\views\receitas\receitas.blade.php)

Segue os codigos

CREATE TABLE `cad_paciente` (
  `id` int(10) UNSIGNED NOT NULL,
  `nome` varchar(50) DEFAULT NULL,
  `endereco` varchar(50) DEFAULT NULL,
  `numero` varchar(10) DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `cad_receita` (
  `id` int(10) UNSIGNED NOT NULL,
  `cad_paciente_id` int(10) UNSIGNED DEFAULT NULL,
  `hr_medico_id` int(10) UNSIGNED DEFAULT NULL,
  `descricao` text,
  `titulo` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
<?php namespace gestor;

use Illuminate\Database\Eloquent\Model;

class Cad_Receitas extends Model {

    protected $table = 'cad_receita';
    public $timestamps = false;
    protected $fillable = array('cad_paciente_id','hr_medico_id','descricao','titulo');


    public function paciente()
    {
        return $this->belongsTo('gestor\Paciente');
    }
}
<?php namespace gestor;

use Illuminate\Database\Eloquent\Model;

class Paciente extends Model {

    protected $table = 'cad_paciente';
    public $timestamps = false;
    protected $fillable = array('nome','endereco','numero','complemento','bairro','religiao','indicacao','profissao','telefone_um','telefone_dois','telefone_tres','email','cpf','cidade','estado','dt_nascimento','estado_civil','idade','dt_consulta');

    public function receitas()
    {
        return $this->hasMany('gestor\Cad_Receitas');
    }
}
@extends('app')

@section('content')
    <form action="/receitas/consulta/" method="get">
        <div class="row">
            <div class="col-lg-6">
                <div class="input-group">
                    <input type="hidden" name="_token" value="{{{ csrf_token() }}}">
                    <input type="text" class="form-control" name="campobusca" placeholder="Receita...">
                    <span class="input-group-btn">
                        <button class="btn btn-default" type="submit">Pesquisar! <span class="glyphicon glyphicon-filter"></span></button>
                    </span>
                    <span class="input-group-btn">
                        <a class="btn btn-default"  href="/receitas/novo/">Novo <span class="glyphicon glyphicon-plus"></span> </a>
                    </span>
                </div><!-- /input-group -->
            </div><!-- /.col-lg-6 -->
        </div>
    </form>

    <table class="table table-striped table-bordered">
        <tr>
            <td width=5%>Código</td>
            <td width=40%>Paciente</td>
            <td width=40%>Receita</td>
            <td width=5%>Alterar</td>
            <td width=5%>Excluir</td>
            <td width=5%>Imprimir</td>
        </tr>
        <?php
        foreach($lista_receitas as $receita) :
        ?>
        <tr>
            <td>{{$receita->id}}</td>

            <td>{{$receita->paciente->nome}}</td>
            <td><?= substr($receita['descricao'], 0, 40) ?></td>
            <td>
                <a class="btn btn-sm btn-warning" href="/receitas/altera/<?=$receita['id']?>">Alterar <span class="glyphicon glyphicon-edit"></span> </a>
            </td>
            <td>
                <a class="btn  btn-sm btn-danger" href="/receitas/remove/<?=$receita['id']?>">Excluir <span class="glyphicon glyphicon-trash"></span> </a>
            </td>
            <td>
                <a class="btn btn-sm btn-success" href="/receitas/relatorio/<?=$receita['id']?>"><i class="fa fa-eye" target="_blank"></i>Imprimir <span class="glyphicon glyphicon-print"></span> </a>
            </td>

        </tr>
        <?php
        endforeach
        ?>

    </table>

@endsection

Att. Vinicius

2 respostas
solução!

Oi Vinicius.

Tente trocar a linha

return $this->hasMany('gestor\Cad_Receitas');

por

return $this->hasMany('gestor\Cad_Receitas', 'cad_paciente_id');

e

return $this->belongsTo('gestor\Paciente');

por

return $this->belongsTo('gestor\Paciente', 'cad_paciente_id');

Se sua foreign key fosse 'paciente_id' poderia funcionar. Mas você não seguiu a convenção de nomenclatura do Laravel (o que não é errado), então melhor especificar as foreign e primary keys.

Abraço.

Obs: se não funcionar essa mudança, poste o código do Controller, porque pode ser que o erro esteja lá também.

Funcionou !!!!

Obrigado !!!