使用Slug更新laravel 5模型

塞韦林

我在``啤酒''表中创建了一个名为``子弹''的行,我想在其中存储我的啤酒名称的子弹。问题是我已经有1000多个啤酒,我不想手动为每个子弹输入子弹其中之一,所以我试图制作一个脚本来自动更新所有子弹。但是我没有做到这一点:

这是我的代码,为每款新啤酒都添加

/**
   * Set the title attribute and automatically the slug
   *
   * @param string $value
   */
  public function setNameAttribute($value)
  {
      $this->attributes['name'] = $value;

      if (! $this->exists) {
          $this->setUniqueSlug($value, '');
      }
  }

/**
   * Recursive routine to set a unique slug
   *
   * @param string $title
   * @param mixed $extra
   */
  protected function setUniqueSlug($name, $extra)
  {
      $slug = str_slug($name.'-'.$extra);

      if (static::whereSlug($slug)->exists()) {
          $this->setUniqueSlug($name, $extra + 1);
          return;
      }

      $this->attributes['slug'] = $slug;
  }

该代码可以正常工作,但是如何使用唯一的标记更改数据库中所有现有的啤酒。谢谢你的帮助。

红心

顺便说一句,您可能是说您在啤酒表中创建了一个名为“ slug”的列,而不是一个ROW。

我会:

更改数据库定义

如果您在应用程序上使用迁移。.可能是一个主意:

使子弹柱成为唯一的迁移。因此,当您尝试添加并非唯一的块时,您的数据库将在将来开始发表评论。因此,您在这方面是永不过时的。

更改当前数据

并用于更改当前数据。如果是一次性操作,为什么不使用Tinker?

$php artisan tinker;

在修补程序中,选择所有模型(或子集)并在每个模型上运行该方法。就像是:

$beers = Beer::all();
foreach ($beers as $beer) {
   //do your thingy
   $beer->save()
}

但是:请确保您键入的代码在本地进行了测试,并且不在生产环境中使用all()(但要在较小的部分中使用... :-)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章