Объединить свойство со значением в Laravel

В проекте у меня есть одна таблица:

item_attributes(
    id,
    property varchar, // year for example
    type varchar,
    value varchar, // 1999 for example
)

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

year => 1999

Когда я выбираю элемент с атрибутами, ответ таков: Объединить свойство со значением в Laravel

Item::with("attributes")->get()

Не уверен, что вы имеете в виду. Не могли бы вы показать нам код?

Mozammil 24.01.2019 11:27

Если вы используете Laravel Eloquent Model, то это определенно поможет вам. laravel.com/docs/5.7/красноречиво-мутаторы

Vinod Joshi 24.01.2019 11:33

@Mozammil Я обновил свой вопрос

gsiradze 24.01.2019 12:43

Спасибо. Я добавил свой ответ.

Mozammil 24.01.2019 12:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
288
4

Ответы 4

Чтобы иметь возможность вернуть пользовательский json data при возврате одной или нескольких моделей того же типа, вы можете использовать Resources, который является еще одним уровнем, отвечающим за преобразование данных, которые вы хотите вернуть из вашего приложения, поскольку вопрос не является конкретным, я даст вам ссылку, где вы можете узнать больше об этом: https://laravel.com/docs/5.7/eloquent-resources#генерирующие-ресурсы

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

public function getPropertyValueAttribute()
{
   return "{$this->property} => {$this->value}";
}

Думаю pluck() должен работать.

Item::with("attributes")
    ->get()
    ->pluck('attributes.value', 'attributes.property'); 

В классе модели элемента определите такой метод, как:

// Assumed that an item "hasMany" attributes:
function getItemAttributesAttribute() {
    $attr = [];
    foreach($this->attributes as $attribute) {
      $attr[$attribute->property] = $attribute->value;
    }
    return $attr;
}

И используйте его в своем контроллере как:

dd(Item::get()->first()->item_attributes);
// or
dd(Item::find(1)->item_attributes);

Если вы хотите получить несколько элементов с атрибутами:

$list = [];
foreach(Item::get() as $item) {
    $list[$item->id] = $item->item_attributes; 
}
dd($list);

Другие вопросы по теме