2
respostas

Pegar o nome do produto do inventarios

Bom dia, estou precisando lista todos os produto que estão cadastrados no inventario, porem o select só me retorna o produto_id, segue abaixo ó codigo.

namespace App;

use Illuminate\Database\Eloquent\Model;

class Inventario extends Model
{
    protected $table = 'inventarios';
    public $timestamps = false;
    protected $fillable = array('data','status');
    protected $guarded = ['id'];

    public function inventarioProdutos()
    {
        return $this->hasMany('App\InventarioProduto');
    }
}
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Produto extends Model {
    protected $table = 'produtos';
    public $timestamps = false;
    protected $fillable = array('nome','quantidade','valor','tamanho','descicao');
    protected $guarded = ['produtos_id'];

    public function inventarioProdutos()
    {
        return $this->hasMany('App\InventarioProduto');
    }
}
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class InventarioProduto extends Model
{
    protected $table = 'inventarios_produtos';
    public $timestamps = false;
    protected $fillable = array('inventario_id','produto_id','quantidade','contagem');
    protected $guarded = ['id'];

    public function produto()
    {
        return $this->belongsTo('App\Produto');
    }
}
<?php

namespace App\Http\Controllers;

use App\InventarioProduto;
use App\Inventario;
use Illuminate\Http\Request;
use App\Http\Requests\ProdutoRequest;
use Illuminate\Support\Facades\DB;

class InventarioProdutoController extends Controller
{
    public function __construct(){
        $this->middleware('nosso-middleware', ['only' => ['adiciona', 'remove']]);
    }

    public function lista($id){
        $inventarioProduto = Inventario::find($id)->inventarioProdutos; 
        echo $inventarioProduto;

        return view('inventarioproduto.listagem')->with('inventarioProduto', $inventarioProduto);
    }
}

Segue abaixo o que ele me retorna o produtos_id, mas quero mostra para usuario o nome do produto, como faço para retornar o nome do produto ?

[{"id":54,"produtos_id":18,"inventario_id":5,"quantidade":0,"contagem":0},{"id":55,"produtos_id":19,"inventario_id":5,"quantidade":0,"contagem":0},{"id":56,"produtos_id":30,"inventario_id":5,"quantidade":0,"contagem":0},{"id":57,"produtos_id":31,"inventario_id":5,"quantidade":0,"contagem":0},{"id":58,"produtos_id":32,"inventario_id":5,"quantidade":0,"contagem":0}]
2 respostas

Olá Claudemir,

tente utilizar o dessa forma no método lista

Inventario::find($id)->inventarioProdutos()->get();

P.S: você também poder consular : https://laravel.com/docs/5.1/eloquent

Att,

Oi Claudemir, tudo bom?

Esse caso onde apenas o id é puxado do banco é consequencia de um conceito chamado Lazy Load. Na verdade, se o que você quer é que o banco busque não só o id mas a entidade inteira, precisamos usar uma outra forma chamada Eager Load. Para isso você pode usar algo parecido com:

Inventario::with('produto')->get();

Você pode mais sobre a sintaxe e eager loading aqui na documentação do Eloquent:

https://laravel.com/docs/5.4/eloquent-relationships#eager-loading