У меня есть две таблицы:
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
,
что я здесь скучаю !?
Вот как вы можете получить все
$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();
🙂
Других решений пока нет …