如何在具有“hasOne”关系的关系表的eloquent查询中应用排序?
品牌模型
class Brand extends Eloquent
{
protected $table = 'brand';
protected $primaryKey = 'id';
protected $fillable = ['brand_name'];
public $sortable = ['brand_name'];
public function brandModel() {
return $this->hasOne('App\Brandmodel', 'brand_id')
->select('id', 'brand_id', 'brand_model_name');
}
}
---------------------------------------
class Brandmodel extends Eloquent
{
protected $table = 'brandmodel';
protected $primaryKey = 'id';
protected $fillable = ['brand_id'];
public $sortable = ['brand_model_name'];
}
在这种情况下,我们可以使用“brand_name”进行排序。但我无法使用“brand_model_name”进行排序。
如果你想这样做,你需要走出Eloquent一点点,然后加入你需要的桌子。
Brand::join('brandmodel', 'brandmodel.brand_id', '=', 'brand.id')
->orderBy('brandmodel.brand_model_name')
->get();
我还建议您重新编写表名以匹配Eloquent默认命名约定,因为它会使代码更容易解析。
你应该试试这个:
Brand::leftJoin('brandmodel', 'brandmodel.brand_id', '=', 'brand.id')
->orderBy('brandmodel.brand_model_name','desc')
->get();