如何编辑laravel集合中的项目

时间:2016-06-02 08:36:09

标签: php laravel laravel-5 eloquent

我是laravel的新手,我运行一个查询并从数据库中获取行,我希望在将它们放入视图之前编辑这些行的列。 所以这是我的代码片段:

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

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

输出截图:

enter image description here

我需要将所有'x'字符替换为numbertemplate列的“ - ”..

4 个答案:

答案 0 :(得分:8)

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

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;
});

答案 1 :(得分:3)

您可以执行以下操作:

from logging import LogRecord
from logging.handlers import SysLogHandler

class MultilineSysLogHandler(SysLogHandler):
    def emit(self, record):
        if '\n' in record.msg:
            record_args = [record.args] if isinstance(record.args, dict) else record.args
            for single_line in record.msg.split('\n'):
                single_line_record = LogRecord(
                    name=record.name,
                    level=record.levelno,
                    pathname=record.pathname,
                    msg=single_line,
                    args=record_args,
                    exc_info=record.exc_info,
                    func=record.funcName
                )
                super(MultilineSysLogHandler, self).emit(single_line_record)
        else:
            super(MultilineSysLogHandler, self).emit(record)

希望这有用。

答案 2 :(得分:2)

您可以使用update()str_replace()

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

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

希望这有帮助。

答案 3 :(得分:0)

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

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

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