У меня есть такая модель
Document [id, text, previous_document_id]
И когда я получаю данные, я могу использовать это отношение:
public function previous()
{
return $this->belongsTo('App\Models\Document', 'previous_document_id');
}
чтобы получить документ с предыдущим документом.
Но бывает такая ситуация: документ-> предыдущий_документ-> предыдущий_документ и так далее.
Как мне получить эту цепочку?
Редактировать:
Я не знаю, сколько существует предыдущих документов
Edit2:
Решение:
public function previous()
{
return $this->belongsTo('App\Models\Document', 'previous_document_id')->with('previous');
}
Но как я могу узнать, сколько предыдущих документов было в исходном документе?
Существуют пакеты, которые могут помочь вам управлять вложенными древовидными структурами. Например. github.com/lazychaser/laravel-nestedset
В противном случае вы можете использовать цикл while, чтобы продолжить поиск предыдущего документа, пока значение не станет null.
Вы можете добавить ->with('previous') в свои отношения. Тогда Document::with('previous')->get() загрузит всю цепочку.
Предпочитаю вложенную структуру Посмотрите на этот пакет, спасибо
-> Тогда Document :: with ('previous') -> get () загрузит всю цепочку. Не работает.
Что именно не работает? Вы изменили отношение к return $this->belongsTo('App\Models\Document', 'previous_document_id')->with('previous');?
Упс ... это было так просто ... facepalm Спасибо!






Вы можете связать отношения:
$document->previous->previous->previous