2

taggableそのため、複数のタグを関​​連付けることができるテーブルを作成しようとしていますが、Laravel のポリモーフィックな関係modelsが最適であると感じました。

残念ながら、次のセットアップではそれらを機能させることができないようです。を実行すると、次のエラーが表示されます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 スニピット

...

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

$track1 = Track::find(1);

$idm = Tag::find(1);

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

...

この問題について何か助けていただければ幸いです。

4

1 に答える 1

2

関係を単純化してみてください - タグの再利用を可能にするために中間テーブルを使用しているようです - これは称賛に値しますが、問題を複雑にしています。

タグ モデルとトラック モデルから始めます。基本的なポリモーフィック リレーションシップが機能するようになったら、さらに複雑にします。

また、問題は、実際の関係関数の名前と同じ名前をモデルに使用している可能性があります。IE Taggable->taggable() vs Tag->taggable()

于 2013-10-01T22:50:00.067 に答える