【问题标题】:unwanted brackets when printing count computed by selectRaw - Laravel Eloquent打印由 selectRaw 计算的计数时不需要的括号 - Laravel Eloquent
【发布时间】:2015-03-05 08:35:11
【问题描述】:
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

作为我的输出


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

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

【问题讨论】:

  • 你有没有看过我在你的另一个问题上写的最后一条评论?
  • 是的,但它没有输出。不过,它不会真的很优雅。我刚刚在某处发现了一个提示 - 括号被打印,因为变量包含数据作为一个集合

标签: laravel eloquent relationship brackets


【解决方案1】:

是的,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();

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

【讨论】:

  • 成功了!!谢谢!我的知识仍然不够深入,无法理解我现在拥有的和急切的负载之间有什么区别。
  • 我添加了一个例子。希望对你有帮助
  • 这个例子让我明白了。谢谢你。在文档中没有明确提及如何打开和关闭急切加载。结果我随机使用 with() 。我可以要求额外的说明吗?为什么 $disliked_books 中有下划线?
  • Laravel 会将snake_case 转换为StudlyCase。但是,您也可以使用 $->dislikedBooks 任何您喜欢的 :)
猜你喜欢
  • 2011-10-12
  • 2013-07-27
  • 2013-07-24
  • 2018-09-25
  • 2016-08-12
  • 2014-07-31
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
相关资源
最近更新 更多