In laravel, supposing there is a 'Product' model (whose table is products), an 'Account' model (whose table is accounts), and an N: N relationship between accounts and products, in the table_product table, find an elegant way to fetch the 5 best selling products using laravel eloquent relationships.
Here's what I have code to date:
public function maisVendidos($quantidade)
{
$cp = ContaProduto::select('produto_id', DB::raw('count(*) as total'))
->groupBy('produto_id')
->orderBy('total', 'DESC')
->limit($quantidade)
->get();
//inicializa um array de produtos + vendidos
$produtos = [];
//para cada ID encontrado, buscar o produto associado
foreach($cp as $obj) {
$produto = Produto::find($obj->produto_id);
array_push($produtos, $produto);
}
return response()->json($produtos);
}
Of course there is a way to relate through models, but I can not find documentation as an easy way to do this.
Can anyone more experienced give an idea?
Thank you!
EDIT: The models are:
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
use App\Categoria;
use App\Item;
class Produto extends Model {
protected $table = 'produtos';
public function itens()
{
return $this->belongsToMany('App\Item');
}
public function categoria()
{
return $this->belongsTo('App\Categoria');
}
public function contas()
{
return $this->belongsToMany('App\Conta');
}
}
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
use App\Produto;
class Conta extends Model {
protected $table = 'contas';
protected $attributes = array(
'valor' => 0.0,
'encerrada' => 0
);
public function mesa()
{
return $this->belongsTo('App\Mesa');
}
public function produtos()
{
return $this->belongsToMany('App\Produto');
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class ContaProduto extends Model
{
protected $table = 'conta_produto';
}