laravel - 如何以 Laravel Eloquent 方式获取数据
问题描述
我有 2 张桌子。
- 出版商(publisher_id,名称)
- 项目(id、item_name、publisher_id)
现在,我只需要一个“出版商名称”和“每个出版商下所有项目的计数”。
我可以通过使用传统方式的简单连接来做到这一点。但我是 Laravel 的新手,想用 eloquent 来实现这一点。
请帮忙,谢谢:)
解决方案
只是改进@mrhm 解决方案:
在模型中创建items
关系Publisher
:
public class Publisher
{
public function items()
{
return $this->hasMany(Item::class);
}
}
在模型中创建publisher
关系Item
:
public class Item
{
public function publisher()
{
return $this->belongsTo(Publisher::class);
}
}
下面的关系返回发布特定帖子的发布者。
现在,要获取发布者名称、统计所有发布者帖子并获取特定发布者在过去 24 小时内发布的所有帖子,您可以执行以下操作:
// Within some controller:
public function getData($publisherId)
{
$publisher = Publisher::find($publisherId);
$name = $publisher->name;
$publisherPosts = $publisher->items;
$countAllPosts = $publisher->items->count();
$postsPast24Hours = $publisher->posts()->where('created_at', '>=', Carbon::now()->subDay());
}
如果您想要所有发布者的所有帖子,请使用以下命令:
// Within some controller:
public function getData()
{
$data = [];
$publishers = Publisher::all();
foreach($publishers as $publisher) {
$data[] = [
'name' => $publisher->name,
'posts' => $publisher->items,
'postsPast24Hours' => $publisher->posts()->where('created_at', '>=', Carbon::now()->subDay()),
'countPosts' => $publisher->items->count(),
];
}
return $data;
}
不要忘记导入 Carbon、Item 和 Publisher。
希望能帮助到你。
推荐阅读
- typescript - JsonWebTokenError jwt 格式错误
- python - 在 Pandas 中:如何检查列表元素是否大于数据框列值
- python - Python 重构方法中的 if-elif-else 语句
- spring-boot - 当 jax-rs 作为 Spring Boot 应用程序运行时,jax-rs @Provider 无法正确接收
- c# - 通过 SmtpClient 和 smtp.office365.com 发送邮件设置邮件的敏感度为普通、个人、私人或机密
- openedge - 进展 4GL - 哪些更改对 CRC 没有影响/影响?
- java - Java SpringBoot OpenApi @ApiResponse 显示错误的返回对象
- typescript - Typescript 泛型在变量和逻辑运算符之间的工作方式不同
- snowflake-cloud-data-platform - Snowflake CROSS JOIN 在 VALUES 子句中引用先前表
- css - 在 React 中将 TextField 与 LinearProgress 对齐