Laravel eloquent получить связанную модель в виде column_name => value - PullRequest
0 голосов
/ 18 октября 2019

У меня есть таблица Product, связанная с таблицей изображений, отношение один ко многим.

Как получить записи изображений не в виде массива? Вместо этого возвращайте только 1 запись изображения в виде column_name: значение

Этот код:

$products = $request->user()->products()->orderBy('id', 'desc')->with(['images' => function($query) {
            $query->where('featured', 1)->limit(1);
        }])->get();

Возвращает данные, подобные этим:

{
        "id": 13,
        "name": "Shoes",
        "price": "3.00",
        "stock": 5,
        "pivot": {
            "user_id": 7,
            "product_id": 13
        },
        "images": [
            {
                "id": 5,
                "file": "5da9d9b493403.png",
                "featured" 1,
                "pivot": {
                    "product_id": 13,
                    "image_id": 5
                }
            }
        ]
    }
}

Как сделать так, чтобы они возвращались следующим образомэто?

{
        "id": 13,
        "name": "Shoes",
        "price": "3.00",
        "stock": 5,
        "pivot": {
            "user_id": 7,
            "product_id": 13
        },
        "images": "5da9d9b493403.png"
    }
}

1 Ответ

1 голос
/ 18 октября 2019

Вы можете добавить пользовательский метод доступа, который получает первое изображение из отношения

В Product модели

protected $appends = ['images'];

public function getImagesAttribute()
{
    return $this->images()->where('featured', 1)->first()->file;
}

public function images()
{
    return $this->hasMany('App\Image');
}

Затем просто верните запрос без активной загрузки

$products = $request->user()->products()->orderBy('id', 'desc')->get();

Надеюсь, это поможет

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