我们说我有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.name
到books_name
和users.name
到user_name
我不喜欢默认的JSON返回
我问这个问题的原因之一是,如果您加入2个或更多表,id
将永远是最后一个table.id
答案 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查找该书。