0

Tengo las siguientes tablas:

  • companies

  • modules

  • company_modules (una empresa tiene muchos módulos)

In Company.php

public function companyModules()
{
    return $this->hasMany(CompanyModule::class);
}

In CompanyModule.php

public function company()
{
    return $this->belongsTo(Company::class);
}

public function module()
{
    return $this->belongsTo(Module::class);
}

El problema es que en modules table existe un campo 'order' y necesito un listado de companyModules (company_modules) pero ordenados por el campo orden de modules.

He intentado colocar esto en Company.php pero obviamente es un error:

public function companyModulesByOrder()
{
    return $this->companyModules()->orderBy('order', 'ASC');
}

No me sirve un listado de modules, porque hay un método en CompanyModule que debo ejecutar, alguna idea?

1 respuesta 1

1

Tu método companyModulesByOrder está haciendo el equivalente a

CompanyModule::orderBy('order','ASC')

(o sea no es una colección con resultados hasta que hagas get sobre ella)

Eso te da un error porque la tabla company_module no tiene ese campo. Podrías usar un join

 return $this->companyModules()
             ->join('modules','id','module_id')
             ->orderBy('modules.order','ASC')->get()

Y si quieres asegurarte de que esté ordenando, puedes añadir la columna de modules en el resultado (que sigue siendo una colección de instancias de CompanyModule)

 return $this->companyModules()
        ->select(['company_modules.*', 'modules.order'])
        ->join('modules','id','module_id')
        ->orderBy('modules.order','ASC')->get()

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.