我已經在這裏5個小時了,似乎無法找出錯誤。我在Laravel 4.1中使用了Polymorphic Many-to-Many關係。Laravel - 多態多對多返回空
作業和事件每個都可以有一個標籤,我已經設置了相應的東西。但每當我打電話
$job->tags
它返回空。
我有這3類(BaseModel延伸口若懸河,命名空間始終是應用程序\模型,我不得不引用它們在如「morphToMany」功能,不與「用」的工作):
class Job extends BaseModel {
public function tags()
{
return $this->morphToMany('\App\Models\Tag', 'taggable');
}
[...]
}
標籤型號:
class Tag extends BaseModel {
public function jobs(){
return $this->morphedByMany('\App\Models\Job', 'taggable');
}
public function events(){
return $this->morphedByMany('\App\Models\Event', 'taggable');
}
[...]
}
事件模型( 「事件」,如會議,研討會 - 有自己的命名空間應用\模型,以避免衝突):
class Event extends BaseModel {
[... nothing relevant yet ...]
}
在我JobsController我已經(測試條件下,ID 14工作存在)
public function show($slug)
{
$job = Job::find(14);
return \View::make('jobs.show', ['job' => $job]);
}
和我的應用程序/視圖/職位/ show.blade.php
[...]
echo $job->name;
echo $job->company;
foreach($job->tags as $tag) {
echo $tag->name;
}
[...]
第一輸出工作得很好它顯示$求職> name和$求職>公司正確的,所以它從工作表中正確讀取,但
$job->tags
返回空並且$標籤 - >名字永遠不會被調用。我有一個標籤,並加標籤表(MySQL的),這裏有相關線路
taggables (table)
-> id->increments()
-> tag_id->integer()->unsigned()->index
->foreign('tag_id')->references('id')->on('tag')
-> taggable_id->integer()->unsigned()->index()
-> taggable_type->string()->index()
tags (table)
-> id->increments()
-> name->string()
-> slug->string()
測試1
當我在做JobsController.php
$jobs = Job::has('tags')->get();
查看它實際上只返回有標籤的作業,所以我有點希望它有一點作用。
測試2
但是,當我試圖讓標籤例如在這種情況下,index.blade.php
foreach($jobs as $job){
foreach($job->tags as $tag){
echo $tag->name;
}
}
它進入$工作循環就好了,但它並沒有進入求職$>標記循環。 在我taggables表我有一個數據集
taggables
id: 1
tag_id: 1 (exists)
taggable_id: 14 (via foreign key)
taggable_type: Job
我要瘋了,不能找出問題所在。我錯過了什麼嗎?
我認爲這個答案是一個很好的領導,如果你仍然想使用命名空間 - 我會嘗試:http://stackoverflow.com/a/21889381/3347365 –