打印由 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
如果没有找到记录,我只看到[]
我尝试了这些更改:
删除 IF
子句
->selectRaw('count(IF(attitude = -1,0,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();
这将获取结果中所有实体的关系。如果您不这样做,每个实体模型都会有一个额外的查询 运行。
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
如果没有找到记录,我只看到[]
我尝试了这些更改:
删除
IF
子句->selectRaw('count(IF(attitude = -1,0,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();
这将获取结果中所有实体的关系。如果您不这样做,每个实体模型都会有一个额外的查询 运行。