【问题标题】:Laravel - cleaner DB queriesLaravel - 更清洁的数据库查询
【发布时间】:2014-05-07 06:16:28
【问题描述】:

我只是在寻找一个更清洁的替代品,我在网上找不到任何东西。

Timetable::where('weekday', '0')->update(['times' => $weekdays[0]]);
Timetable::where('weekday', '1')->update(['times' => $weekdays[1]]);
Timetable::where('weekday', '2')->update(['times' => $weekdays[2]]);
Timetable::where('weekday', '3')->update(['times' => $weekdays[3]]);
Timetable::where('weekday', '4')->update(['times' => $weekdays[4]]);
Timetable::where('weekday', '5')->update(['times' => $weekdays[5]]);
Timetable::where('weekday', '6')->update(['times' => $weekdays[6]]);

【问题讨论】:

  • 到目前为止,我已经使用了一个 for 循环将其减少到 3 行。我只是想知道是否可以在单个查询中完成?

标签: php laravel frameworks


【解决方案1】:

您可以将它放在一个简单的 for 循环中,但这不会使代码更简洁(只是更短)。看看 Eloquent 的作用域功能。你可以把它变成这样:

class Timetable extends Eloquent {

    public function scopeWeekday($query, $day)
    {
        $query->where('weekday', $day);
    }

    public function updateTimes($weekday)
    {
        $data = array('times' => $this->weekdays[$weekday]);
        $this->update($data);
    }
}

我不知道 $weekdays 中的数据是什么类型,但是您可以像这样使用这个范围和更新方法:

Timetable::weekday(1)->updateTimes(1);

我确实意识到这并没有更短,但它肯定更干净,更具可读性。您甚至可以将范围与更新结合起来,但我希望这能激发您清理代码。

【讨论】:

  • 非常感谢!我使用了 for 循环,但我会将其标记为答案,因为这肯定看起来更干净!
猜你喜欢
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 2021-05-09
  • 2022-01-16
  • 2017-01-12
  • 2017-08-30
  • 2019-05-12
相关资源
最近更新 更多