Я хочу настроить вывод из hasMany () в моем API - PullRequest
0 голосов
/ 09 января 2019

Я просто пытаюсь изменить свой выходной json-код в моем Api, но я не могу понять, как он работает.

Я пробую отношения между 2 таблицами. Первый стол - user, второй - LogTransfer.

Я использую Lumen (5.7.7) (Laravel Components 5.7. *)

У меня есть две таблицы в состоянии отношений.

Моя первая таблица user содержит столбцы [user_id, username] и user_id, ссылки на столбцы id_source и id_destination во второй таблице. Я хочу изменить / заполнить id_source и id_destination на имя пользователя , которое я получил из первой таблицы - как я могу это сделать?

Я возвращаю его как json для API, и это вывод

"id_transfer": 1,
        "id_source": 3,
        "id_destination": 1,
        "jumlah": 1000,
        "waktu": "2019-01-22 04:13:00",
        "qrLog": 1,
        "jenis": "Pembelian"

я хочу, чтобы мой вывод стал таким

"id_transfer": 1,
        "source": admin,
        "destination": iko,
        "jumlah": 1000,
        "waktu": "2019-01-22 04:13:00",
        "qrLog": 1,
        "jenis": "Pembelian"

Вот мой код в модели. Пользователи

public function logTransferFrom()
{
    return $this->hasMany('App\LogTransfer','id_destination');
}

А вот мой код в контроллере

public function from(Request $request) 
{    
    $logTransfer = Auth::user()->logTransferFrom()->get();

    return response()->json(['status' => 'success','result' => $logTransfer]);
}

1 Ответ

0 голосов
/ 09 января 2019

Этот тип функциональности не поддерживается "из коробки", поскольку все сопоставления выполняются с помощью идентификаторов. Но вы можете добиться чего-то подобного, используя accessors и append

В вашей модели журнала добавьте

public $appends = ['source', 'destination']; //dyn. appends keys to json

public function userSource()                     // mapping helper for source
{
    return $this->belongsTo('App\User', 'id_source');
}

public function userDestination()                // mapping helper for destination
{
    return $this->belongsTo('App\User', 'id_destination');
}

public function getSourceAttribute($value)       // gets the username for id_source
{
    return $this->userSource->username;
}

public function getDestinationAttribute($value)  // gets the username for id_destination
{
    return $this->userDestination->username;
}

Вот и все!

Теперь, когда вы создаете дамп json, он должен иметь еще два ключа в дополнение к тем, которые были ранее: «источник» и «назначение» со значениями в качестве совпадающих имен пользователей из таблицы пользователей.

...