laravel - laravel 将自定义另一个查询添加到 releatinship
问题描述
在laravel
我有这个工作正常的查询,
$months = Month::with(['lessons' => function ($query) {
$query->with(['files']);
}])->get();
在这个查询中,我有$query->with(['files'])
它是:
public function files()
{
return $this->hasMany(LessonFiles::class);
}
我想为所有具有以下内容的$query->with(['files'])
行添加此查询lesson_file_key
:
LessonsView::whereLessonFileKey($lessonFile->lesson_file_key)->count()
这意味着我想$query->with(['files'])
通过添加上面的代码来获取此查询中每一行的计数,例如:
$months = Month::with(['lessons' => function ($query) {
$req = $query->with(['files']);
// for example using foreach on $req
// LessonsView::whereLessonFileKey($req->lesson_file_key)->count()
}])->get();
我的模型:
class Month extends Model
{
protected $guarded = ['id'];
protected $hidden = ['id'];
public function lessons()
{
return $this->hasMany(Lesson::class);
}
public function files()
{
return $this->hasMany(MonthFiles::class);
}
}
class Lesson extends Model
{
protected $guarded = ['id'];
protected $hidden = ['id', 'month_id', 'filename', 'file_url'];
public function month()
{
return $this->belongsTo(Month::class);
}
public function files()
{
return $this->hasMany(LessonFiles::class);
}
}
class LessonFiles extends Model
{
protected $guarded = ['id'];
protected $hidden = ['id', 'lesson_id', 'filename', 'file_url'];
public function lesson()
{
return $this->belongsTo(Lesson::class);
}
public function visits(){
return $this->hasMany(LessonsView::class);
}
}
class LessonsView extends Model
{
protected $guarded = ['id'];
protected $hidden = ['id','user_id','lesson_files_id','lesson_file_key','ip_address'];
public function visitedLesson(){
return $this->belongsTo(LessonFiles::class);
}
}
解决方案
withCount
像这样使用whereColumn
:
$months = Month::with(['lessons' => function ($query) {
$query->with(['files' => function($q) {
$q->withCount(['visits' => function($vq) {
$vq->whereColumn('lesson_views.lesson_file_key', 'lesson_files.lesson_file_key')
}]);
}]);
}])->get();
推荐阅读
- algorithm - 为什么我们有双重哈希函数为 [(hash1(key) + i * hash2(key)) % TABLE_SIZE] 而不是简单地为 [(i * hash2(key)) % TABLE_SIZE]?
- python - 如何使用信任库文件和密码让 KafkaConsumer 在 python 中获取主题内容?
- amazon-web-services - 放大从 Cognito 获取所有者用户属性
- javascript - 上传内容时出现 Firebase 存储错误(错误?)
- laravel - Laravel Voyager 登录后重定向到其他页面
- string - 单字符串列表的内存分配率高于多字符串列表
- python - 将avro文件批量索引到elasticsearch
- java - yaml 等于 equalsIgnoreCase
- node.js - 在 Cloud Function 中“重定向”后做些什么?
- python - Linter flake8 找不到 flake8,即使指定了 executablePath