Как в модели объявления добавить связанные строки ad_images с условиями - PullRequest
0 голосов
/ 30 января 2020

В 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 с необходимыми мне условиями, но если это возможно? Если да, то как?

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