2016-11-02 4 views
0

Я создал строку в моей таблице «пиво» ​​под названием «slug», где я хочу сохранить слизню названия моего пива. Проблема в том, что у меня уже более 1000 пива, и я не знаю, я хочу, чтобы вручную ввести пул к каждому из них, поэтому я пытаюсь сделать скрипт для автоматического обновления всех пули. Но я не смог сделать это:Обновление laravel 5 моделей с slug

Это мой код, чтобы дать для каждого нового пива слизняка

/** 
    * 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; 
    } 

код прекрасно работает, но как я могу изменить все существующие сорта пива в базе данных с уникальным слизняк. Спасибо за помощь.

+0

Рассмотрите использование Sluggable Behavior или просто проверьте код, чтобы получить вдохновение ... https://github.com/cviebrock/eloquent-sluggable –

ответ

1

BTW вы, вероятно, означает, что вы создали столбец с именем «тихоход» в таблице пива, вместо ROW

я бы:..

определение Изменения базы данных

Если вы используете миграции на вашем приложении .. может быть идея:

сделать столбец пробкового уникальным Tru миграции. Таким образом, ваша база данных начнет делать комментарии в будущем, когда вы попытаетесь добавить пул, который не является уникальным. Таким образом, ваши будущие доказательства этого.

Изменение текущих данных

И для изменения текущих данных. Если это разовая операция, почему бы не использовать Tinker?

$php artisan tinker; 

В повозиться, вы выбираете все модели (или подмножество) & запустить этот метод на всех. Что-то вроде:

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

НО: убедитесь, что код типа проверяется на локальном компьютере и не используют все() на продукцию (но делать это в более мелкие части) ... :-)

1

В этом случае наилучшей практикой является, на мой взгляд, работа с задачей интерфейса командной строки, которая обрабатывает генерацию каждого имени в правильном пуле. Выполнение команд в Laravel является кусок пирога: проверьте документы here (creating commands)

В методе ручки, получить коллекцию всех записей (возможно, в куски 100/200, как описано here (chunking results) Установка имени текущего значения (. $ model-> name = $ model-> name) должен делать трюк, так как должен инициировать метод setter в вашей модели, который предназначен для генерации slug в соответствии с заданным именем. Очевидно, перед установкой значения просто проверьте, является ли поле slug пустой или не

Смежные вопросы