Laravel: сортировка полиморфных отношений - PullRequest
0 голосов
/ 22 сентября 2018

КАК

  1. В приложении Student Controller как отсортировать результаты по имени студента?

  2. Как отсортировать результаты по имени опекуна студента?



СТРУКТУРА ТАБЛИЦЫ

  • таксономии

    • id
    • entity_type - Itсодержит имя класса модели-владельца.
    • entity_id - Содержит значение идентификатора учащегося.
  • студенты

    • id
    • имя
  • хранители

    • id
    • student_id
    • имя



КОНТРОЛЛЕР

  • 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 голосов
/ 22 сентября 2018

Использование 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();
...