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
作为我的输出
待办事项: 如何删除除输出中的值以外的所有内容?
提示: 我知道问题是由事实造成的,结果是一个收集,而不是一个整数
答案 0 :(得分:2)
是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();
这将获取结果中所有实体的关系。如果不这样做,将为每个实体模型运行一个附加查询。