【问题标题】:How to edit items in laravel collection如何编辑 laravel 集合中的项目
【发布时间】:2016-10-01 21:12:13
【问题描述】:

我是 laravel 的新手,我运行查询并从数据库中获取行,我想在查看这些行之前编辑这些行的一列。 所以这是我的代码片段:

$callPlans = CustomerCallPlan::whereNotNull('id');

foreach ($callPlans->get() as $callPlan) {
    dd($callPlan);
}

以及输出截图:

我需要用numbertemplate列的'-'替换所有'x'字符..

【问题讨论】:

    标签: php laravel laravel-5 eloquent


    【解决方案1】:

    如果您想始终为您的模型执行此转换,您只需将以下访问器方法添加到模型类:

    public function getNumbertemplateAttribute() {
      return str_replace('x', '-', $this->attributes['numbertemplate']);
    }
    

    现在每次访问 $customerCallPlan->numbertemplate 都会得到转换后的字符串。

    否则在获取数据时只转换列:

    $plans = $callPlans->get()->map(function($plan) {
      $plan->numbertemplate = str_replace('x', '-', $plan->numbertemplate);
      return $plan;
    });
    

    【讨论】:

    • 别忘了返回$plan
    • 为什么要这样做?
    • 因为否则,->map() 方法将返回 null,根据我今天的经验,这正是每个获取的模型实例将是(来)。在代码块结束前,添加return $varName; 修复此问题。
    【解决方案2】:

    您可以执行以下操作:

    $callPlans = CustomerCallPlan::whereNotNull('id')->get();
    
    foreach ($callPlans as $callPlan) {
        $callPlan->numbertemplate = (whetever you need);
        $callPlan->save(); //save the changes
    }
    

    希望这对您有所帮助。

    【讨论】:

    • 这不推荐用于大型集合,所以如果我使用某种分页,请考虑一下。我想在不丢失分页集合的情况下进行一些处理,换句话说,我只想处理每个请求获取的项目。我建议编辑通过引用传递的项目
    【解决方案3】:

    您可以使用update()str_replace()

    $callPlans = CustomerCallPlan::whereNotNull('id');
    
    foreach ($callPlans->get() as $callPlan) {
        $callPlan->update(["numbertemplate"=>str_replace("x", "-", $callPlan->numbertemplate]);
    }
    

    希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      默认情况下,php 在将变量作为参数传递给函数时会创建一个变量的副本。您可以通过在参数前面加上 & 符号来覆盖此行为,这会将指向原始变量的指针传递给函数。

      我们可以在集合内的 foreach 循环中使用它来修改原始项目,如下所示:

      $callPlans->each(function(&$plan) {
          $plan->numbertemplate = 'xyz';
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-22
        • 1970-01-01
        • 2020-03-10
        • 2015-06-24
        • 1970-01-01
        • 2015-01-12
        相关资源
        最近更新 更多