Laravel Multi-Level SELECT на детей

У меня есть две таблицы:

Table Section
id name section_id
1 Properties 0
2 Rent       1
3 Sale       2
4 Houses     2
5 Lands      2

а также

Table Ads
id section_id ....

Модель Sectoin

 class Section extends Model
{
public function Ads()
{
return $this->hasMany(Ad::class);
}

public function SubSections()
{
return $this->hasMany(Section::class);
}

public function Parent()
{
return $this->belongsTo(Section::class);
}
}

Модель объявления

class Ad extends Model
{

public function Section()
{
return $this->belongsTo(Section::class);
}}

section может иметь подразделы, и эти подразделы могут иметь подразделы, и так далее, и так далее, (у вас есть идея).

то, что я пытаюсь сделать, это загрузить некоторые объявления, скажем (10) из всех разделов, которые являются потомками раздела, так что …

разделProperties сама может иметь рекламу, и Rent сама по себе может иметь свою собственную рекламу, и она идет в разделы потомков …

я попытался использовать готовую загрузку следующим образом:

$probs = Section::where('name', 'Properties')->first()->SubSections()->with('SubSections','Ads')->get();

он загружает все sub-sections из sub-sections , но не Ads,

что я здесь скучаю !?

скриншот таблиц

0

Решение

Вот как вы можете получить все

$section = Section::with('SubSections.Ads', 'Ads')->where('name', 'Properties')->first();

$sectionAds = $section->Ads;

$subSectionAds = $section->SubSections->filter(function($section) {
return $section->ads->count() ? $section->ads : false;
})->flatten();

$allAds = $sectionAds->merge($subSectionAds);

ОБНОВИТЬ

В соответствии с этот, Вы можете сделать что-то вроде …

public function SubSections()
{
return $this->hasMany(Section::class);
}

public function AllSubSections($section == null)
{
return $this->SubSections()->with('AllSubSections');
}

$section = Section::with('AllSubSections')->where('name', 'Properties')->get();

$subSections = $section->AllSubSections->flatten();

$subSectionsIds = $subSections->pluck('id')->toArray();

Ads::whereIn('section_id', $subSectionsIds)->get();

🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]