2
所以我試圖創建一個taggable
表,它使多個models
有與他們相關的標籤,並認爲Laravel的Polymorphic relationships將是路要走。多態關係和同名模型和morphTo函數
不幸的是我似乎無法讓他們在以下設置中工作。正如我在運行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));
...
任何幫助會在這個問題上大加讚賞。
感謝您的建議。我不明白你對中間表的含義增加了我的情況的複雜性。我也有一個Tag模型來封裝'Tag'邏輯。查看更新的問題。 – Malachi
我不明白你爲什麼需要一個標籤和一個Taggable模型?你爲什麼不簡單地將標籤變形爲跟蹤?爲什麼Tag-> Taggable-> Track組合? –
'標籤'包含標題和描述等信息,所以感覺應該是它自己的模型。 'Taggable'是膠水模型,使事物具有'標籤'。那有意義嗎? – Malachi