Laravel 5:雄辩 - 缓慢的resluggify关系数据

时间:2016-04-23 07:03:41

标签: laravel-5.1 slug

我是Laravel的新手并且一直在开发应用程序。我正在使用Laravel 5并获得漂亮的URL我正在使用eloquent-sluggable。 我有2个表,用户和艺术家及其各自的模型。我在Artist表中有关系。在Artists模型中,我有以下代码。

      class Artist extends Model implements SluggableInterface 
    {

        use SluggableTrait;

        /**
         * The database table used by the model.
         *
         * @var string
         */
        protected $table = 'artists';

        /**
         * @var array
         */
        protected $sluggable = [
            'build_from' => 'users.name',
            'save_to'    => 'slug',
        ];

 public function user()
    {
       return $this->belongsTo('App\User');
    }

我正在尝试使用修补程序将数据库中的现有数据更新为slug。我在艺术家表中创建了一个名为slug的新字段。当我运行以下命令时:

$artists = \App\Artist::all()
foreach ($artists as $artist) { $artist->name->resluggify()->save(); }

我得到以下错误:

  [Symfony\Component\Debug\Exception\FatalThrowableError]
  Fatal error: Call to a member function resluggify() on string

如何更新数据库中的现有数据?

2 个答案:

答案 0 :(得分:0)

我刚看了cviebrock/eloquent-sluggable的文档,因为我假设这是你正在使用的软件包。

在这种情况下,

name只是一个字符串,因此您将无法从中调用任何方法,这是您正在尝试执行的操作。

观察它,方法resluggify()它只是

的辅助函数

sluggify(true) - true只是告诉它缓和模型,即使模型已经“被砸”了

所以以下内容应该有效:

$artist->resluggify()->save()

希望这有帮助!

答案 1 :(得分:0)

我能够解决这个问题。这是我的错,我必须将模型更新为implement SluggableInterface,然后使用特征。

use SluggableTrait;

这解决了这个问题,我能够重新调整。