mysql - 创建一个子查询别名以在 Laravel 查询生成器中使用它

标签 mysql laravel laravel-5

我想创建类似 SQL 子查询别名的东西,这样我就可以像普通 SQL 字段一样使用它。例如,我有 3 个表:useruser_commentsuser_comment_answers。如果我想统计当前用户评论的所有答案,我会这样做:

SELECT
  COUNT(*) as comment_answers_count
  FROM user_comment_answers
  WHERE user_comment_id IN (SELECT id FROM user_comments WHERE user_id = :id)

现在我想让 Laravel 将其视为 user 表的一个普通字段,所以我可以简单地做这样的事情:

echo Auth::user()->comment_answer_count

或者像这样

$popularUsers = User::where('comment_answer_count', '>=', 100)

如何在 Laravel 5.4 中实现这一点?

最佳答案

尝试

$users = Auth::withCount('comments')->get();

现在所有用户都有一个comments_count属性

foreach($users as $user) {
    echo $user->comments_count;
}

假设您在 UserComment 模型中定义了关系。

更新

根据你的第一条评论,你想要的是一个accessor

public function getCommentAnswerCountAttribute($value) {
     //define your query here 
}

更多信息在这里:https://laravel.com/docs/5.4/eloquent-mutators#defining-an-accessor

希望这能给你找到解决方案的提示

关于mysql - 创建一个子查询别名以在 Laravel 查询生成器中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42197944/

相关文章:

php - 如何通过 API 调用在 Laravel 上验证::check() 用户

php - 如何在 Laravel 5.2 中制作自定义配置文件以从数据库中获取特定数据?

python - 在 MySQL 中存储数据帧字典的好方法是什么?

php - 用于搜索用户 token (技能)的 SQL 查询

php - 使用php将部分文本从mysql更改为变量名

c# - 带命令的 Crystal 报表未显示所有字段

laravel - 将日期选择器值保存到 Laravel 中的数据库

php - 更新后如何正确转发到另一个 View

php - 如何在 Laravel 中合并两个请求

Laravel 5 CORS - XMLHttpRequest 无法加载 http ://myapi. com.预检响应具有无效的 HTTP 状态代码 500