В Laravel 6 У меня есть запрос объявлений со связанными ad_report_abuses и ad_categories, такими как
$ads = Ad
::with('adReportAbuses.user')
->with('adCategories.category')
->getByTitle($this->filter_title)
->onlyNoneInfo()
->getByStatus('A')
->getUserByStatus('A')
->leftJoin('users', 'users.id', '=', 'ads.creator_id')
->orderBy($this->order_by, $this->order_direction)
->select(
'ads.*',
'users.name as creator_username',
'users.email as creator_email',
'users.phone as creator_phone'
)
->offset($limit_start)
->take($ads_per_page)
->distinct()
->paginate($ads_per_page);
return (new AdCollection($ads));
и файлами ресурсов, такими как:
class AdResource extends JsonResource
{
public static $wrap = 'ads';
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
'adCategories' => AdCategoryResource::collection($this->whenLoaded('adCategories')),
и
class AdCategoryResource extends JsonResource
{
public static $wrap = 'ad_categories';
public function toArray($request)
{
return [
'id' => $this->id,
'ad_id' => $this->ad_id,
'category_id' => $this->category_id,
'category' => new CategoryResource($this->category),
и это работает для меня. Также мне нужно добавить к этим данным связанные строки ad_images, например:
$adImage= AdImage
::getByAdId($adItem->id)
->getByMain(true)
->first();
if ($adImage) {
$adItem->main_image= $adImage->image;
$adItem->main_image_info= $adImage->info;
} {
// if there are no rows found with ad_images.main == true, then get 1 row from ad_images by smalles id
}
Если сделать это с отображением:
->map(function ($adItem) {
...
})
->all();
Тогда я потерял «мета» информацию, которая мне нужна для разбивки на страницы.
Я полагаю, что в моей модели объявления необходимо установить связь со связанными строками ad_images с необходимыми мне условиями, но если это возможно? Если да, то как?