打印由 selectRaw 计算的计数时不需要的括号 - Laravel Eloquent

unwanted brackets when printing count computed by selectRaw - Laravel Eloquent

public function booksdislikedbyUser()
{
    return $this->hasMany('Userattitude')->where('attitude', '-1')->where('creator_id', Auth::user()->id)->where('item_type',   'entitycreation')->selectRaw('count(IF(attitude = -1,0,1)) as dislikedbooks')->groupBy('entity_id');

}

在我的 foreach 循环中,我只是输入:

@foreach($rank_entities_by_capacity as $o)
{{$o->booksdislikedbyUser}}

我收到了正确的值,但它被方括号括起来了:

[{"dislikedbooks":1}]

而期望的结果应该是

1

如果没有找到记录,我只看到[]

我尝试了这些更改:

  1. 删除 IF 子句

    ->selectRaw('count(IF(attitude = -1,0,1))

这没有效果。

  1. 正在为 selectRaw

    添加额外项目

    ->selectRaw(attitude, 'count(IF(attitude = -1,0,1) as dislikedbooks)

效果:我收到了这个:

[{"attitude":1,"dislikedbooks":2}]

尝试 #3: 我试过这个

$o->misdeeds

但没有生成任何内容。

尝试 #4:

我试过这个:

{{$o->misdeedsagainstUser or 'still not working'}}

你猜怎么着……我得到了

still not working

作为我的输出


待办事项: 如何从输出中删除除值以外的所有内容?

提示: 我在某处了解到问题是由事实引起的,结果是一个集合,而不是一个整数

是的,booksdislikedbyUser 的结果是一个集合。这是 hasMany 关系的预期结果。

您可以通过向模型添加一个带有 accessor 的新属性来解决此问题。

public function getDislikedBooksAttribute(){
    if($attitude = $this->booksdislikedbyUser->first()){
        return $attitude->dislikedbooks;
    }
    return 0;
}

然后这样做:

{{ $o->disliked_books }}

只需确保您是预加载 booksdislikedbyUser。这意味着在查询 $rank_entities_by_capacity 变量时,您需要在其中包含 with('booksdislikedbyUser')

一个简单的例子:

$rank_entities_by_capacity = Entity::leftJoin(...)->with('booksdislikedbyUser')->get();

这将获取结果中所有实体的关系。如果您不这样做,每个实体模型都会有一个额外的查询 运行。