我想在我的API中自定义hasMany()的输出

时间:2019-01-09 15:49:19

标签: php laravel api lumen

我只是尝试在我的Api中更改输出的json代码,但我无法理解其工作原理

我尝试关系2表 第一个表用户,第二个表是LogTransfer

Iam使用流明(5.7.7)(Laravel组件5.7。*)

我在关系条件下有两个表 我的第一个表 user 具有 [user_id,用户名] 和列 user_id 成为列 id_source 的引用id_destination 在第二张表中,我想将 id_source id_destination 填充/填充到我从第一张表中获得的用户名我能做到吗?

iam作为api的json返回,输出为

"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 :(得分:0)

由于所有映射都是通过id完成的,因此不立即支持这种功能。但是您可以通过使用accessorsappends

来实现类似的功能。

在您的Log模型中添加此

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时,除早先的那些键外,还应该有两个键,即“ source”和“ destination”,其值作为用户表中的匹配用户名。