2016-08-03 2 views
1

J'ai une tableYii2 Sluggable mise à jour du comportement des lignes existantes dans DB

-------------------- 
id |title | slug 
-------------------- 
1 | name_1 | 
-------------------- 
1 | name_2 | 
-------------------- 

Comment puis-je mettre à jour slug colonne de colunm "title" en utilisant yii2 comportement Sluggable

code ci-dessous ne fonctionnent pas

$this->update('event', ['slug' => (new Expression(Inflector::slug('title')))]); 

Répondre

0

Ajouter le SluggableBehavior au modèle

use yii\behaviors\SluggableBehavior; 

class YourModel extends \yii\db\ActiveRecord 
{ 

    public function behaviors() 
    { 
     return [ 
      [ 
       'class' => SluggableBehavior::className(), 
       'attribute' => 'title', 
       // 'slugAttribute' => 'slug', 
      ], 
     ]; 
    } 

L'attribut slugAttribute n'est pas nécessaire car notre colonne s'appelle slug, la structure par défaut.

+0

mais comment puis-je obtenir la liste des refferenses à mes éléments, si limace est vide? –

+0

Je pense que vous devez le faire manuellement ou créer une fonction qui récupère les lignes une par une et met à jour son slug. –

0

La meilleure solution je action console d'écriture comme

public function actionEventSlugs(){ 
    $events = \frontend\models\Events::find()->all(); 
    foreach($events as $event){ 
     $slug = \yii\helpers\Inflector::slug($event->title); 
     $event->slug = $slug; 
     // $this->stdout($slug."/n");    
     $event->update(false); 
    } 
} 

et lancer la console et il suffit d'exécuter la commande

yii build/event-slug 

Cela pourrait mieux pour votre production aussi. Ici « construire » est le nom du contrôleur

mai il aide

Merci