Как перечислить родительскую модель и ее дочернюю таблицу в порядке, используя Eloquent? - PullRequest
1 голос
/ 18 октября 2019

У меня есть таблица с именем department, в которой есть родительские / дочерние отношения. У департамента может не быть или много детей, и теперь моя проблема заключается в том, как я могу показать в таблице от родителя, за которым следует его ребенок в порядке следования? Например:

Parent A
Child A
Child Y
Parent B
Parent C
Child F
Child N

Я даже пробовал это в sql, что-то вроде этого, но мне не повезло:

select d.name from departments d left join departments dd on d.id = dd.parent_id ORDER by d.name

1 Ответ

2 голосов
/ 18 октября 2019

Laravel может справиться с этим довольно красноречиво (каламбур). Просто определите модель и 2 отношения:

class Department extends Model(){
  public function parent(){
    return $this->belongsTo(self::class, "parent_id", "id");
  }
  public function children(){
    return $this->hasMany(self::class, "parent_id", "id");
  }
}

Затем, при запросе, сначала выберите тех, у кого нет родителя (отделы "верхнего уровня")

$departments = Department::doesntHave("parent")->with(["children"])->get();

Затем просто зациклите$departments и их "children":

foreach($departments AS $department){
  echo $department->name; 
  foreach($department->children AS $child){
    echo $child->name;
  }
}

Поскольку это вложенные циклы, вы получите правильный результат;каждое подразделение «верхнего уровня» будет немедленно перечислено, за которым следуют от 0 до X его дочерних элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...