2

因此,我正在尝试创建一个taggable表,使多个models标签能够与它们相关联,并认为 Laravel 的多态关系将是可行的方法。

不幸的是,我似乎无法让他们在以下设置中工作。因为我在运行时收到以下错误php artisan migrate:refresh --seed

{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Class name must be a valid object or a string","file":"...\\vendor\\laravel\\framework\\src\\
Illuminate\\Database\\Eloquent\\Model.php","line":527}}

我认为这个问题是由于该Taggable模型的morphTo名称与下面概述的相同。因为改变这个解决了这个问题。为什么这会导致问题?

可标记模型

class Taggable extends Eloquent {

    protected $table = 'taggable';

    public function taggable()
    {
        return $this->morphTo();
    }
}

履带型号

class Track extends Eloquent {

    protected $table = 'tracks';

    protected $fillable = array('title', 'year', 'image');

    protected $guarded = array('id');

    public function playlists()
    {
        return $this->belongsToMany('Playlist');
    }

    public function tags()
    {
        return $this->morphMany('Taggable', 'taggable');
    }
}

标记模型

class Tag extends Eloquent {

    protected $table = 'tags';

    protected $fillable = array('title', 'description');

    protected $guarded = array('id');
}

移民

Schema::create('taggable', function(Blueprint $table)
{
  $table->increments('id');
  $table->integer('taggable_id');
  $table->string('taggable_type');
  $table->integer('tag_id');
  $table->timestamps();
});

DatabaseSeeder Snippit

...

DB::table('taggable')->delete();

$track1 = Track::find(1);

$idm = Tag::find(1);

$track1->tags()->create(array('tag_id' => $idm->id));

...

在此问题上的任何帮助将不胜感激。

4

1 回答 1

2

尝试简化您的关系-您似乎正在使用中间表来允许标签重用-这是值得称赞的,但会使您的问题复杂化。

从 Tag 和 Track 模型开始——在基本的多态关系工作后增加额外的复杂性。

此外,问题可能是您使用的模型名称与实际关系函数的名称相同。IE Taggable->taggable() vs Tag->taggable()

于 2013-10-01T22:50:00.067 回答