Laravel雄辩的sortBy和OrderBy

时间:2017-11-28 17:59:42

标签: laravel eloquent

我必须与表相关。

PRODUCTOS

  • ID
  • 农布雷

SubProductos(子表)

  • ID
  • 农布雷
  • Producto_Id

我需要按Producto.Nombre排序,然后按SubProducto.Nombre

排序

它是:

的组合

$ subProductos = SubProducto :: with(' producto') - > get() - > sortBy(' producto.nombre');

$ subProductos = SubProducto :: orderBy(' nombre',' ASC') - > get();

有任何帮助吗?谢谢!

Model Producto.php

class producto extends Model
{
    public function SubProductos()
    {
        return $this->hasMany('Certifier\SubProducto');
    }
}

Model SubProducto.PHP

class SubProducto extends Model
{
    public function EmpresaSubProductos()
    {
        return $this->hasMany('Certifier\EmpresaSubProducto');
    }
    public function producto()
    {
        return $this->belongsTo('Certifier\Producto');
    }
    public function subProductoFormateado() {
        return $this->producto->nombre . ' - ' . $this->nombre;
    }
}

3 个答案:

答案 0 :(得分:1)

There are a few hacky solutions on the issue page about this in Laravel.我认为在第一条评论中建议组合你想要的所有字段的回调可能会有所帮助。

答案 1 :(得分:1)

我假设您将它们排序为blade.php中的View

从控制器开始,只需定义$productos

即可
// retrieving productos from Model
$productos = producto::orderBy('nombre')->get()->all();

return view( 'your.blade.view' )->with( [ 'productos' => $productos ] );

在blade.php中,您可以像这样显示$productos

<ul class="list-producto">
@foreach( $productos as $producto )
   <li class="producto">
       <span>{{ $producto->nombre }}</span>
       @if( $productos->sub_productos )
           <ul class="list-sub-producto">
           @foreach( $productos->sub_productos->sortBy('nombre')->all() as $sub_producto )
               <li class="sub-producto">
                   <span>{{ $producto->nombre }} - {{ $sub_producto->nombre }}</span>
               </li>
           @endforeach
           </ul>
       @endif
   </li>
@endforeach
</ul>

作为备注,您应该将class producto替换为class Producto,因为模型通常使用studly_case

答案 2 :(得分:0)

解决使用:

$subProductos = SubProducto::selectRaw('sub_productos.*, productos.nombre as nombre_producto')
  ->join('productos', 'productos.id', '=', 'sub_productos.producto_id')
  ->orderBy('productos.nombre', 'ASC')
  ->orderBy('sub_productos.nombre', 'ASC')
  ->get();

不确定原因,但这是关键:

$ subProductos = SubProducto :: selectRaw('sub_productos。*, productos.nombre as nombre_producto ')