【问题标题】:Yii2 Sluggable Behavior update existing rows in DBYii2 Sluggable Behavior 更新数据库中的现有行
【发布时间】:2016-08-03 10:15:05
【问题描述】:

我有一张桌子

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

如何使用 yii2 sluggable 行为从列“标题”更新列 slug

下面的代码不起作用

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

【问题讨论】:

    标签: yii2 behavior


    【解决方案1】:

    将 SluggableBehavior 添加到模型中

    use yii\behaviors\SluggableBehavior;
    
    class YourModel extends \yii\db\ActiveRecord
    {
    
        public function behaviors()
        {
            return [
                [
                    'class' => SluggableBehavior::className(),
                    'attribute' => 'title',
                    // 'slugAttribute' => 'slug',
                ],
            ];
        }
    

    不需要 slugAttribute,因为我们的列称为 slug,框架默认值。

    【讨论】:

    • 但是如果 slug 为空,我如何获得对我的元素的引用列表?
    • 我认为您需要手动执行此操作或创建函数来逐行获取并更新其 slug。
    【解决方案2】:

    我使用编写控制台操作的最佳解决方案,例如

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

    并启动控制台并简单地执行命令

    yii build/event-slug
    

    这对您的制作也有好处。 这里'build'是控制器名称

    希望对你有帮助

    谢谢

    【讨论】:

      猜你喜欢
      • 2015-05-04
      • 2018-09-29
      • 1970-01-01
      • 2016-11-23
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      相关资源
      最近更新 更多