2016-04-15 124 views
1

我有2個控制器和模型:Laravel方法[的hasMany]不存在

  1. 用戶控制器&模型
  2. 英雄控制器&模型

每個用戶可以有無限的英雄 - 這意味着他們之間的關係是一對多

在我UserController中我創建了以下方法:

/** 
    * Get the heroes of the user. 
    */ 
    public function heroes() 
    { 
     return $this->hasMany(Hero::Class); 
    } 

,而在我的HeroController我創造了這個方法:

/** 
* Get the user that owns the hero. 
*/ 
public function user() 
{ 
    return $this->belongsTo(User::class) 
} 

將此添加到我的路線文件:

Route::get('userHeroes', '[email protected]'); 

並返回此錯誤:

{"error":{"message":"Method [hasMany] does not exist.","status_code":500}} 

出了什麼問題..?

回答

2

控制器只是請求和返回數據之間的一個委託 - 告訴它你想要的東西,它計算出你想要的東西,然後它調用合適的地方來獲得返回的東西。

hasMany()belongsTo()方法,在另一方面,是特別相關的HeroUser模型,另一方面邏輯。

你需要的是將heroes()方法移動到User模型,因爲用戶可以有許多英雄。還需要user()方法到您的Hero模型,因爲英雄屬於一個用戶。

然後你把一個行動調用一個控制器。比方說,例如,您有一個UserController,它有一個getHeroes()方法。這可能看起來像這樣:

public function getHeroes() { 
    $user = auth()->user(); 
    $heroes = $user->heroes; 
    return $heroes; 
} 

然後這將格式化爲JSON。只是一個例子。

但是你可能想閱讀一兩個關於這個的教程,因爲它是相當基本的東西,並且很好的處理早期的問題。請不要採取那種錯誤的方式 - 如果遇到問題,我們很樂意提供幫助,我只是認爲您可能需要更強大的基礎。 Laracasts的屏幕錄像強烈建議用於此目的。

1

它必須在模型中聲明,而不是在控制器中,hasMany()是在雄辯模型中的一種方法。

0

hasMany和belongsTo方法是雄辯的類方法。 而我們在我們的模型中繼承雄辯,以便我們可以使用雄辯的方法功能。

爲了使用關係,您必須在相應的模型類中定義關係方法,然後您可以從控制器調用。

請參考文檔Eloquent relationship documentation

希望我已清除您的疑問。

謝謝