2014-02-19 329 views
1

我必須努力執行的hasMany方法時,這個惱人的問題:Laravel雄辯誤差「的hasMany」的關係

我有一個任務模式,其中我想檢索所有的狀態

class Task extends Eloquent { 
protected $guarded = array(); 

public static $rules = array(); 


public function states(){ 
    return $this->hasMany('TaskState','task_id'); 
} 

...從這個TaskState模式(DB具有列:TASK_ID,USER_ID,狀態)

class TaskState extends Eloquent { 
public $table= "taskstates"; 
protected $guarded = array(); 

public static $rules = array(); 


public function task(){ 
    return $this->belongsToMany('Task','task_id'); 
} 

然而,當我嘗試執行此,

$task = Task::find($id); 
    return $task->states; 

它不斷給這個錯誤:

Call to undefined method TaskState::newQuery() 

我卡在這個像兩天。有人會知道這裏可能會出現什麼問題嗎? 在此先感謝!

+0

這看起來可能是一個命名空間問題 - 如果TaskState類確實擴展了Eloquent,那麼它應該有一個newQuery()方法。但是,您是否嘗試過手動調用該方法? – alexrussell

+0

'hasMany()'函數的反函數是'belongsTo()'。所以你的'task()'函數試着返回'return $ this-> belongsTo('Task','task_id')';. 'belongsToMany()'通常用於數據透視表。 – user3158900

+0

我已將它更改爲belongsTo(),但仍然存在相同的錯誤:無論如何要感謝! – vrijdrogenaam

回答

0

如果模型之間存在一對多關係,那麼您應該在TaskState中使用'belongsTo'而不是'belongsToMany;

+0

我已經試過改變這一點,但徒勞無功:錯誤依然存在。不管怎麼說,還是要謝謝你 :) – vrijdrogenaam