如何从Laravel JSON Api响应中删除字段

时间:2018-02-18 21:21:19

标签: laravel rest api response

我有一个API返回一个与另一个对象具有一对一关系的对象。作为对象背后的模型,确实有时间戳,这些也是在询问API时提供的。

// Get all transactions
Route::get('transaction', function() {
return Transaction::with('Personone','Persontwo')->get();
});

如何阻止Laravel返回API中对象的时间戳?

我用Google搜索,但只发现了一些中间件或响应宏的提示,但没有发现任何示例指向正确的方向。也许你可以帮助我。

2 个答案:

答案 0 :(得分:1)

你可以制作属性"隐藏"这样他们就不会出现在json中。 docs

class Transaction extends Model
{
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = ['timestamp'];
}

答案 1 :(得分:0)

我不确定我是否正确地提出了问题但是如果你想从急切加载中选择有两种方式

第一个是内联选择

Route::get('transaction', function () {
    return Transaction::with('Personone:id,foo,bar', 'Persontwo:id,foo,bar,foobar')->get();
});

第二个是传递闭包

Route::get('transaction', function () {
    return Transaction::with([
        'Personone' => function ($query) {
            $query->select('id', 'foo', 'bar');
        },
        'Persontwo' => function ($query) {
            $query->select('id', 'foo', 'bar', 'foobar');
        }])->get();
});
  

渴望加载特定列您可能并不总是需要每列   来自您正在检索的关系。出于这个原因,Eloquent   允许您指定所需关系的哪些列   检索:

     

$ users = App \ Book :: with(' author:id,name') - > get();


  

限制急切负荷有时您可能希望加载a   关系,但也指定了额外的查询约束   急切加载查询。这是一个例子:

     

$ users = App \ User :: with([' posts' => function($ query){       $ query-> where(' title',' like','%first%'); }]) - >得到();在这个例子中,Eloquent只会急切地加载帖子标题的帖子   列包含单词first。当然,您可以调用其他查询   构建器方法以进一步自定义预先加载操作:

     

$ users = App \ User :: with([' posts' => function($ query){       $ query-> orderBy(' created_at',' desc'); }]) - >得到();