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

时间:2015-01-07 12:34:07

标签: laravel eloquent relationship brackets

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))

  2. 这没有效果。

    1. selectRaw

      添加额外项目

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

    2. 效果:我收到了这个:

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

      尝试#3: 我试过这个

      $o->misdeeds
      

      但没有生成任何内容。

      尝试#4:

      我试过了:

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

      然后猜猜......我得到了什么

      still not working
      

      作为我的输出


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

      提示: 我知道问题是由事实造成的,结果是一个收集,而不是一个整数

1 个答案:

答案 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();

这将获取结果中所有实体的关系。如果不这样做,将为每个实体模型运行一个附加查询。