【问题标题】:Laravel 5.1 Eloquent collection not returning correct resultsLaravel 5.1 Eloquent 集合没有返回正确的结果
【发布时间】:2016-06-11 16:42:35
【问题描述】:

我有一个雄辩的集合{{ $questions }},当我在刀片模板中输出它时,我得到以下结果:

[{"question_num":0,"survey_id":2,"question_text":"test","expected_answer":1},
  {"question_num":1,"survey_id":2,"question_text":"test","expected_answer":1}] 

如您所见,恰好有两个对象。现在当我应用这个 过滤{{ $questions->where('question_num','=', 0) }},我得到以下正确的结果:

[{"question_num":0,"survey_id":2,"question_text":"test","expected_answer":1}] 

但是当我应用以下过滤器 {{ $questions->where('question_num','=', 1) }} 时,我得到一个空结果,为什么会这样,当集合的 question_num 的值为 1 时?

[]

我整天都在为此挠头!

【问题讨论】:

    标签: json eloquent laravel-5.1 laravel-blade laravel-collection


    【解决方案1】:

    这里的问题是你使用了操作符,但是 where 方法的集合签名是:

    where( string $key, mixed $value, bool $strict = true)
    

    所以在这两种情况下,您都应该使用:

    {{ $questions->where('question_num', 0) }}
    

    {{ $questions->where('question_num', 1) }}
    

    得到你期望的结果

    【讨论】:

    • 那么为什么下面的还是返回null:{{ $questions->where('question_num', 0)->get('question_text' }}?
    • 最后我不得不这样做:{{ $questions->where('question_num', 0)->first()['question_text'] }} 除非有人知道更好的方法吗?
    • @ozzii Get 方法不是你想在这里使用的。你可能想在这里使用pluck。但是假设您可能从 where 获得多个值,您不应该使用 first(),除非您 100% 确定您将始终只有 1 个元素。您可能有兴趣使用例如:questions->where('question_num', 0)->pluck('question_text')->all(),您将在这里获得包含来自questions_text 列的所有值的数组,其中 question_num=0
    猜你喜欢
    • 2016-04-27
    • 1970-01-01
    • 2023-03-14
    • 2021-10-23
    • 2014-09-13
    • 2012-08-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多