【问题标题】:Laravel: Loop on booleans to check TRUE and FALSELaravel:循环布尔值以检查 TRUE 和 FALSE
【发布时间】:2015-11-20 09:18:53
【问题描述】:

我需要一点帮助。我在我的 laravel 环境中设置了关系,我想检索所有标记为 taken 的 slots。

所以它只是在每个插槽上循环并检查taken 是真还是假。

这就是我的想法......并且一直在尝试

$plateCont = \App\Models\PlateContainer::find(7);
  return   $freeslots = $plateCont->containerSlots()->get();


  foreach ($freeslots as $slot)
  {
    if($slot->where('taken', false))
    {
      return $slot->lists('slot');
    }
    // return $slots;
  }

为此,我得到200 状态码,但没有显示任何内容。你能告诉我一个很好的方法来做到这一点。

它只是获取指定id 的所有插槽并检查它们是否为taken。如果它们不是taken,则返回插槽,否则返回all 插槽

更新将get() 链接在containerSlots() 后面。 Foreach 正在返回所有内容。

[
    1,
    7,
    9,
    5,
    3,
    5,
    4,
    3,
    2,
    1,
    5,
    1,
    8,
    9,
    8,
    5,
    5,
    1,
    8,
    5,
    1,
    5,
    8,
    8,
    4,
    5,
    8,
    4,
    2,
    1
]  

【问题讨论】:

  • print_r($freeslots) 请
  • @aldrin27 哪一行?
  • @user3641381 在foreach之前
  • @madforstrength 我在containerSlots() 之后添加了get(),但之后foreach 将返回所有slots。我已经更新了代码
  • @aldrin27 已更新。请检查

标签: php laravel


【解决方案1】:

您可以使用filter

$freeslots = $plateCont->containerSlots->filter(function($item) {
    return $item->taken;
})

【讨论】:

  • 我之前尝试过。它返回Call to undefined method Illuminate\Database\Query\Builder::filter()
  • @user3641381 应该是$plateCont->containerSlots->filter。属性,而不是方法。属性返回集合,方法返回关系。
【解决方案2】:

您可以尝试只获取slot 即taken

$freeslots = $plateCont->containerSlots()->where('taken', true)->get()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 2013-10-17
    • 2012-09-12
    • 2013-12-19
    • 2013-09-23
    • 1970-01-01
    相关资源
    最近更新 更多