Php Laravel DB get左联接表列的和(相对于一个post向上/向下的拇指的和)
我有一个评论网站,用户可以随意浏览评论。评论表的存在是因为我使用的是我发现的Laravel样板文件。我已经使用migrate添加了thumbs表,并创建了一个模型和控制器 这是有问题的两张桌子Php Laravel DB get左联接表列的和(相对于一个post向上/向下的拇指的和),php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我有一个评论网站,用户可以随意浏览评论。评论表的存在是因为我使用的是我发现的Laravel样板文件。我已经使用migrate添加了thumbs表,并创建了一个模型和控制器 这是有问题的两张桌子 reviews +----+-----------------+------------+-----------+---------+ | id | review_constant | title | publish | etc... | +----+-----------------+-
reviews
+----+-----------------+------------+-----------+---------+
| id | review_constant | title | publish | etc... |
+----+-----------------+------------+-----------+---------+
| 1 | 1 | Test | published | blah |
| 2 | 2 | Test2 | old | blah |
| 3 | 2 | Test2 Edit | published | blah |
+----+-------+---------+------------+-----------+---------+
review_thumbs
+----+---------+-----------------+-------+
| id | user_id | review_constant | thumb |
+----+---------+-----------------+-------+
| 1 | 12 | 2 | 1 |
| 2 | 10 | 2 | -1 |
| 3 | 8 | 2 | 1 |
| 4 | 17 | 2 | 1 |
+----+---------+-----------------+-------+
review\u常量
是原始的reviews.id
,它被传递给任何编辑以进行单个审阅。我们只对publish='published'
的行感兴趣
我可以得到每一个发表的评论没有问题
Reviews::where( 'publish', 'published' )
但我还需要与该review的review_常量相匹配的拇指总数,我可以用SQL来实现这一点
SELECT reviews.id, reviews.review_title, rt.review_constant, rt.thumbs
FROM reviews
LEFT JOIN (
SELECT review_constant, SUM(thumb) AS thumbs FROM review_thumbs
) AS rt ON (rt.review_constant = reviews.review_constant)
where reviews.publish = 'published'
我在拉威尔努力做到这一点。我发现一些说明告诉我需要添加这样的关系
class ReviewThumbs extends Model
{
public function reviews()
{
return $this->belongsTo(Reviews::class, 'review_constant', 'review_constant');
}
...
}
class Review extends Model
{
public function reviewThumbs(){
return $this->hasMany(ReviewThumbs::class, 'review_constant', 'review_constant');
}
...
}
然后我可以用('review_thumbs')完成这个Reviews::where('publish','published')->,然后我应该能够在刀片模板中使用它。我不知道正确的语法,我做的每件事都会出错。我尝试了sum()、count(),使用getReviewThumbsAttribute,但我迷路了
@if ($review->thumbs->sum() > 0 )
+{{ $review->thumbs->sum() }}
@else
{{ $review->thumbs->sum() }}
@endif
应该用什么来代替$review->thumbs->sum()
,如果需要,我需要向PHP类添加哪些方法?每个review
都与review\u thumbs
有一对多的关系,review\u常量
列表示review
表的id
。因此,您的审查
模型应该如下所示:
class-Review扩展了模型{
公共职能部门审查委员会(){
return$this->hasMany(查看humbs::class'id',post_id');
}
公共职能部门审查委员会(){
返回$this->hasMany(ReviewThumbs::class,'review_constant','id');
}
公共函数thumbsUp(){
return$this->hasMany(ReviewThumbs::class,'review_constant','id')->where('thumb','=',1);
}
公共函数thumbsDown(){
return$this->hasMany(ReviewThumbs::class,'review_constant','id')->where('thumb','=',-1);
}
}
现在,对于任何review
实例,您可以简单地计算出现次数或对thumb
列求和
$sum=$review->reviewThumbs()->sum('thumbs');
$thumbUps=$review->thumbUp()->count();
$thumbsdowns=$review->thumbsDown()->count();
我希望这会有所帮助。每个查看都与查看的拇指有一对多的关系并且查看的常量列表示查看表的id
。因此,您的审查
模型应该如下所示:
class-Review扩展了模型{
公共职能部门审查委员会(){
return$this->hasMany(查看humbs::class'id',post_id');
}
公共职能部门审查委员会(){
返回$this->hasMany(ReviewThumbs::class,'review_constant','id');
}
公共函数thumbsUp(){
return$this->hasMany(ReviewThumbs::class,'review_constant','id')->where('thumb','=',1);
}
公共函数thumbsDown(){
return$this->hasMany(ReviewThumbs::class,'review_constant','id')->where('thumb','=',-1);
}
}
现在,对于任何review
实例,您可以简单地计算出现次数或对thumb
列求和
$sum=$review->reviewThumbs()->sum('thumbs');
$thumbUps=$review->thumbUp()->count();
$thumbsdowns=$review->thumbsDown()->count();
我希望这能有所帮助。review\u常量
与review表的id
不匹配;它匹配审阅。审阅\u常量
。使用该固定和()只计算+ve值。如果我将-1调整为正值,则会将它们相加。但当它们小于零时,它们就会被忽略<代码>返回$this->hasMany(ReviewThumbs::class,'review_constant','review_constant')->其中('thumb','因此,当列为tinyint或decimal时,它不会将-1识别为-ve,但会将-2识别为-ve。当列为varchar时,它会按预期工作。review\u常量
与review表的id
不匹配;它匹配reviews.review\u常量
,与该固定和()只计算+ve值。如果我将-1调整为正值,它会将它们相加。但当它们小于零时,它们将被忽略。return$this->hasMany(ReviewThumbs::class,'review_constant','review_constant')->其中('thumb','因此,当列为tinyint或decimal时,它不会将-1识别为-ve,但会将-2识别为-ve。当列为varchar时,它会按预期工作。