【问题标题】:Laravel blade: how to select an item from an Eloquent collection by its keyLaravel 刀片:如何通过键从 Eloquent 集合中选择一个项目
【发布时间】:2021-07-28 19:50:26
【问题描述】:

在 PHP 数组中你可以这样做:

$array = [
  1 => ['example', 'hello'],
  ... => [..., ...]
  114 => ['things', 'here'],
];

然后动态访问这些数组项之一:

$key = 114;
echo $array[$key];

我的问题是你是否可以在 Blade 中使用 Eloquent 集合做类似的事情。我想做的是通过它的 ID 从集合中获取模型,例如:

$collection = Product::all();
$model_key = 114;
echo $collection[$model_key];

【问题讨论】:

  • 类似echo $collection[114][0]; 的东西会返回things

标签: php laravel


【解决方案1】:

是的,就像查询构建器上的 find() 方法一样,您可以在 Collection 上使用它,如下所示:

$collection = Product::all();
$model_key = 114;
dd($collection->find($model_key));

【讨论】:

    【解决方案2】:
    <select name="items">
       @foreach($array as $key=>$value)
         <option value={{$key}}>{{$value}}</option>
       @endforeach
    </select>
    

    【讨论】:

      【解决方案3】:

      Eloquent 查询返回 Collection 实例。 如果您只需要找到 1 条记录,您可以这样做:

      return $collection->firstWhere('id', $id);
      

      如果您需要多次搜索,那么最快的解决方案是:

      $collection->keyBy('id');
      return $collection[$id];
      

      所有收集方式:https://laravel.com/docs/8.x/collections#available-methods

      【讨论】:

        【解决方案4】:

        您可以使用mapWithKeys() 将集合与键映射,然后您可以将其与键一起使用,如下所示:

        $collection = Product::all();
        $collection = $collection->mapWithKeys(function ($item) {
            return [$item['id'] => $item];
        });
        

        现在你可以按键使用集合了:

        echo $collection[$model_key];
        

        【讨论】:

          【解决方案5】:

          从你的例子中,

          $collection = Product::all();
          $model_key = 114;
          echo $collection[$model_key];
          

          产品不使用id 作为键存储。相反,产品的id 是该特定产品的密钥。 例如,$collection 可能包含

          [
            ["id" => 12, "name"=> "Shirts"],
            ["id" => 13, "name"=> "Shorts"],
          ]
          

          要查找id 的产品,您需要使用一种可用的收集方法。我更喜欢firstWhere 收集方法。 要使用它,它看起来像:

          $collection = Product::all();
          $model_key = 114;
          $product = $collection->firstWhere('id', $model_key);
          echo $product;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-02-28
            • 1970-01-01
            • 2015-10-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多