laravel - 拉拉维尔 | 获取列的值
问题描述
我在使用 laravel 时遇到问题,所有详细信息都在下面给出。
我在 mysql 数据库中有 2 个表:书籍和笔。
书籍和笔有列:bookid,bookname & penid,penname,分别。
用户有一个事务表:bookid 或 penid。
我正在检索特定用户的所有交易:
$usertransactions = $user->usertransactions;
不用担心用户和用户事务模型之间的关系,它的所有设置。
上述函数的响应是:
"data": {
"Id": "1",
"Bookid": "27",
}
或者
"data": {
"Id": "2",
"Penid": "42",
}
我希望结果如下所示:
"data": {
"Id": "1",
"Bookid": "27",
"Bookname" : "bookname from books table using the Bookid from response"
}
我会很感激帮助。
问候
解决方案
首先,命名列的常见做法是snake_case
. 所以最好命名bookid
为book_id
. 而且对于您的关系和函数名称,最好保留它CamelCase
。所以usertransactions
与其写不如写userTransactions
。
让我们回到你的问题。由于您的响应中有 book_id,因此您应该能够在模型之间建立UserTransaction
关系Book
。在Book model
:
public function userTransactions() {
return $this->belongsToMany(UserTransaction::class); //it can be one to many or many to many base on your logic. I assume Many to many
}
那么你应该定义反向关系UserTransaction model
:
public function books(){
return $this->belongsToMany(Book::class);
}
load
现在您可以使用类似的方法加载所有书籍对象$usertransactions = $user->usertransactions->load('books')
如果您希望您的响应完全匹配,请使用https://laravel.com/docs/5.6/eloquent-resources
@Maraboc 提到的。
祝你好运!
推荐阅读
- windows - 如何通过批处理删除文本文件的重复部分?
- ubuntu - 为什么 rsync 与跳转主机和 sshpass 不起作用
- c# - 有什么方法可以使用 EF Core 在多台服务器上更新相同的 [database].[table]?
- regex - 在 Vim 中 submatch 命令是如何工作的?
- reactjs - 无法通过浏览器地址行导航以使用路由反应组件
- puppeteer - 如何使用 puppeteer 选择单选按钮
- c# - 统一的相机旋转轴
- haskell - 如何检查树是完整的二叉树
- r - 总结一个数据框结构。行是变量
- ffmpeg - 添加音频时如何在ffmpeg中默认音轨?