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

Erro ao carregar a Produto - categoria - Nome

Pessoal tudo bem ?

Ao fazer a chamada

{{ $produto->categoria->nome }}, no formulario de listagem, esta sendo retornado um erro
 @foreach ($produtos as $produto)
            <tbody>
            <tr align="center" class="{{$produto->quantidade<=1 ? 'danger' : '' }}">
                <td>{{$produto->nome}}</td>
                <td>{{$produto->valor}}</td>
                <td>{{$produto->descricao}}</td>
                <td>{{$produto->quantidade}}</td>
                <td>{{$produto->tamanho}}</td>
                <td> {{ $produto->categoria->nome }}</td>
                <td>
                    <a href="/produtos/mostra/{{$produto->id}}">
                        <span class="glyphicon glyphicon-search" aria-hidden="true"></span>
                    </a>
                </td>
                <td>
                    <a href="{{action('ProdutoController@remove',$produto->id)}}">
                        <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
                    </a>
                </td>
            </tr>
            </tbody>
        @endforeach
Class 'estoque\Categoria' not found (View: C:\Users\Souza\Documents\estoque\resources\views\produto\listagem.blade.php)

Mas se eu retirar o campo acima o projeto executa numa boa =/

O que poderia ser?

Meu banco esta com os id inseridos conforme mencionado na aula.

foi feito os metodos a chama hasMany em categoria e na classe produto possui o comando $this->belongsTo

6 respostas

Oi Julio, tudo bom?

Sua classe Produto possui o atributo categoria? com getter?

O código da view parece ok mesmo. Mas, se você quiser compartilha com a gente a classe Produto que pode ter alguma coisa por lá =)

Abraço

Andre, esssa é a minha clase Produto.

class Produto extends Model
{
    protected $table = 'produtos';
    public $timestamps = false;
    protected $fillable = array('valor', 'nome', 'descricao', 'tamanho', 'quantidade','categoria_id');
    public function categoria(){
        return $this->belongsTo('estoque\Categoria');
    }
}

Categoria

class Categoria extends Model
{


    public function produtos(){
        return $this->hasMany('estoque\Produto');
    }
}
solução!

Opa, parece que o problema está nessa linha:

        return $this->belongsTo('estoque\Categoria');

Nesse método estamos passando o namespace que aponta pra classe Categoria. A partir desse namespace, seu composer vai se encarregar de carregar a classe com o autoload definido.

Entretanto, esse autoload só funciona se o namespace estiver batendo com o definido no composer.json. Normalmente, o padrão é seguir o namespace definido com a estrutura de pastas.

Se você quiser, compartilha seu composer.json aqui com a gente, assim fica mais facil apontar possiveis problemas.

Além disso, não sei se a classe Categoria e Produto tem o namespace definido e em qual namespace elas estão definidas. Então, se você quiser, compartilha com a gente a declaração do namespace dessas classes, se tiver. Se não tiver, é um bom ponto pra começar =)

Andre, tudo bem ?

Segue o composer conforme solicitado.

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=5.5.9",
        "laravel/framework": "5.1.*",
        "bestmomo/scafold": "dev-master",
        "doctrine/dbal": "v2.4.2"
    },
    "require-dev": {
        "fzaninotto/faker": "~1.4",
        "mockery/mockery": "0.9.*",
        "phpunit/phpunit": "~4.0",
        "phpspec/phpspec": "~2.1"
    },
    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    "autoload-dev": {
        "classmap": [
            "tests/TestCase.php"
        ]
    },
    "scripts": {
        "post-install-cmd": [
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "post-root-package-install": [
            "php -r \"copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ]
    },
    "config": {
        "preferred-install": "dist"
    },
    "minimum-stability": "dev",
    "prefer-stable": true
}

Segue o link do github, para facilitar a consulta :D

https://github.com/sleepk/estoque

Em relacao aos getters como mencionado acima, eu ainda nao sei como funciona, pois pulei o curso de php basico para o laravel.

Andre, tudo bem ?

Problema resolvido ao trocar o

 return $this->belongsTo('estoque\Categoria');

por

 return $this->belongsTo('App\Categoria');

foi trocado tambem as variaveis em produto, o problema foi solucionado :D

Agradeço pela ajuda.

Boa Júlio!

Fico feliz que tenha resolvido =)

Abraço