Laravel | Usando Eloquent hasManyThrough

CairoCoder

Eu tenho uma tabela chamada invoiceDetailsque tem a item_idpartir foreign keyde outra tabela chamada itemsque tem category_idcomo foreign keyda tabela chamada categories.

Quero fazer o seguinte usando eloquent:

$result = InvoiceDetail::groupBy('item_id')
                ->selectRaw('sum(qty) as qty, item_id')->with('item', 'category')->get();

mas estou recebendo um erro:

Call to undefined relationship [category] on model [App\InvoiceDetail].

Aqui está minha relação dentro do Categorymodelo:

public function invoiceDetail() {
       return $this->hasManyThrough('App\InvoiceDetail', 'App\Item', 'category_id', 'item_id');
}

Alguma sugestão?

Robert

Não tenho certeza se você precisaria de uma hasManyThroughrelação aqui, a menos que queira buscar todos os InvoiceDatailobjetos pertencentes a todos os itens que por sua vez pertencem à categoria. Essa parte não está clara em sua pergunta.

Mas em seu exemplo, você está obtendo itens com suas categorias de um item_id distinto.

O motivo pelo qual isso não está funcionando é porque você está tentando obter a relação de categoria do InvoiceDetailobjeto, que não existe.

->with('item', 'category')

Você deseja carregar o com Categorybase na relação do item, não com base no InvoiceDetail, tente a notação de ponto (visto que você definiu as outras relações)

->with('item.category')

As relações devem ser assim:

class InvoiceDetail extends Model
{
    public function item()
    {
        return $this->belongsTo(\App\Item::class);
    }
}

class Item extends Model
{
    public function invoiceDetails()
    {
        return $this->hasMany(\App\InvoiceDetail::class);
    }

    public function category()
    {
        return $this->belongsTo(\App\Category::class);
    }
}

class Category extends Model
{
    public function items()
    {
        return $this->hasMany(\App\Item::class);
    }


    public function invoiceDetails()
    {
        return $this->hasManyThrough(\App\InvoiceDetail::class, \App\Item::class, 'category_id', 'item_id');
    }
}

Você gostaria de usar o hasManyThroughse, por exemplo, tiver uma categoria e quiser carregar todos os detalhes da fatura diretamente.

dd($category->invoiceDetails);

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

TOP lista

quentelabel

Arquivo