2016-04-28 5 views
1

Это моя модель структуры:Laravel заказав модель belongsTo

class Family extends Model 
{ 
    public function members() 
    { 
     return $this->hasMany('App\Person'); 
    } 
} 

class Person extends Model 
{ 
    public function family() 
    { 
     return $this->belongsTo('App\Family'); 
    } 

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

class School extends Model 
{ 
    public function students() 
    { 
     return $this->hasMany('App\Person'); 
    } 
} 

Короче говоря, Person принадлежит ко многим Schools, но только один Family.

пустышки данные:

families_table 

id | name 
--------- 
1 | Smith 
2 | Doe 

people_table 

id | family_id | school_id | name 
---------------------------------- 
1 | 1   | 1   | Betty 
2 | 2   | 1   | John 

school_table 

id | name 
------------- 
1 | MIT 

Таким образом, мы имеем пользователей: Smith, Betty и Doe, John. Теперь, если я это сделать:

$school = School::find(1); 

foreach ($school->students AS $student) { 
    echo $student->family->name . ', ' . $student->name 
} 

я получаю:

Smith, Betty 
Doe, John 

То, что я хочу видеть это:

Doe, John 
Smith, Betty 

Как получить School и перечислить members отсортирован по полю name в таблице Family?

+0

Если у кого есть идея для лучшего названия, я скрываю для предложений. – PawelMysior

ответ

1

Самый простой способ заключается в сортировочный коллекции:

$school->students->load('family'); 
$school->students->sortBy(function ($item) { 
    return $item->family->name; 
}); 

Вы также можете сортировать результаты в запросе с использованием присоединиться как:

$students = $school->students() 
    ->with('family') 
    ->select('students.*') 
    ->join('families', 'families.id' , '=', 'students.family_id') 
    ->orderBy('families.name') 
    ->get(); 
$school->setRelation('students', $students); 
Смежные вопросы