我必须与表相关。
PRODUCTOS
SubProductos(子表)
我需要按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;
}
}
答案 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 ')