Yii2-从相关表名获取以添加到Sluggable

时间:2016-10-16 13:16:36

标签: activerecord yii2

Yii2。如何从相关表中获取数据并将其添加到Sluggable行为中。 在下面的例子中,我希望为每本书添加slug-title,如“Book House,作者Greenberg”。

class Books extends \yii\db\ActiveRecord
{

    public function behaviors()
    {
        return [
            [
                'class' => SluggableBehavior::className(),
                'attribute' => "Book" . $this->name . ", author " . $this->getAuthor->name,
            //'slugAttribute' => 'slug',
            ],
        ];
    }
    public function getAuthor()
    {
        return $this->hasOne(Author::className(), ['id' => 'author_id']);
    }
}

1 个答案:

答案 0 :(得分:0)

只需对可缓冲行为使用回调,如下所示:

public function behaviors()
{
    return [
        [
            'class'=>SluggableBehavior::className(),
            'value'=>function ($event) {
                $parts = ['Book', $this->name, 'author', $this->author->name];
                return Inflector::slug(implode('-', $parts));
            },
        ],
    ];
}

我的例子会输出一个像这样的slu :: book-house-author-greenberg这是slug比你的版本更好的做法。无论如何...如果您仍然喜欢上述方式,只需更改返回值。

我的示例中使用的功能的文档是here