Laravel API Routes操纵默认的JSON返回

时间:2018-04-20 22:14:11

标签: json laravel laravel-5

我们说我有2张桌子。 users& books。 表格看起来像这样 用户:

id, name
1, Jone
2, Doe

书:

id, name, user_id
3, Dummy book1, 1
4, Dummy book2, 1
5, Dummy book3, 2

当我尝试返回属于用户(例如用户1)的所有书籍时,如此

$query->where('id', 1)->join('books', 'users.id', '=', 'books.user_id');

我得到JSON,但问题是JSON显示id对于不是这样的用户的书:

id: 3,//this is the book id not the user id
user_id: 1
...
...
id: 4,
user_id: 1

如何让我的查询将id显示为用户ID,如此

id:1
... whatever

更好的是,我如何操纵整个JSON,以便重命名密钥?例如books.namebooks_nameusers.nameuser_name 我不喜欢默认的JSON返回

我问这个问题的原因之一是,如果您加入2个或更多表,id将永远是最后一个table.id

2 个答案:

答案 0 :(得分:1)

实现目标的最简单方法是在la select中定义参数:

$query->select(DB::raw("users.id AS user_id",), ...other rows you want to get back from the DB) 

只需确保在选择中定义所需的参数。

希望这有帮助!

答案 1 :(得分:0)

我建议使用真正的Laravel方式的关系。因此,在您的图书模型中,您将与用户建立关系。然后,您可以在查询中使用with('user')方法来急切加载用户!方式更简单,更清洁!

Book::find($id)->with('user');

使用ID时,使用find方法要好得多。

然后在你的书模型中:

public function user()
{
    return $this->belongsTo(User::class);
}

我实际上并不知道书和用户之间的关系所以我只是在猜测。

另一个提示:如果您在控制器中执行此操作,请使用Route Model Binding,这样您甚至不必通过其ID查找该书。