Laravel:排序多态关系

时间:2018-09-22 14:15:23

标签: laravel laravel-5 eloquent laravel-5.2 laravel-5.1

如何

  1.   

    在学生控制器中,如何按学生姓名对结果进行排序?

  2.   

    如何按学生的监护人姓名对结果进行排序?



表结构

  • 分类法

    • id
    • entity_type-它包含拥有模型的类名。
    • entity_id-它包含学生的ID值。
  • 学生

    • id
    • 名称
  • 监护人

    • id
    • student_id
    • 名称



CONTROLLER

  • StudentController.php

    public function getStudents()
    {
        return Taxonomy::with([
                'entity', 
                'entity.guardian'
            ])
            ->where('entity_type', 'Student')
            ->get();
    }
    



模型

  • Taxonomy.php

    public function entity()
    {
        return $this->morphTo();
    }
    
  • Student.php

    public function taxonomies()
    {
        return $this->morphMany('App\Taxonomy', 'entity');
    }
    
    public function guardian()
    {
        return $this->hasOne('App\Guardian');
    }
    
  • Guardian.php

    public function student()
    {
        return $this->belongsTo('App\Student');
    }
    

1 个答案:

答案 0 :(得分:1)

使用sortBy()

$taxonomies = Taxonomy::with('entity.guardian')
    ->where('entity_type', 'Student')
    ->get();

// Solution #1: Sort results by student name.
$sortedTaxonomies = $taxonomies->sortBy('entity.name');
return $sortedTaxonomies->values();

// Solution #2: Sort results by student's guardian name.
$sortedTaxonomies = $taxonomies->sortBy('entity.guardian.name');
return $sortedTaxonomies->values();