2015-03-18 36 views
3

我嘗試通過數組來查看我的關係....我在realation用戶和項目表....如何通過多對多的關係,以查看陣列[Laravel 5]

這裏用戶模型:

public function projects(){ 
    return $this ->belongsToMany('App\Project','project_user'); 
} 


public function getUserList(){ 
    return $this -> projects; 
} 

這裏是我的家控制器:

public function project(User $project){ 
      $this -> selected = $project; 
      return view('projects',array('selected' =>$project -> selected -> getUserList()->lists('id'))); 
     } 

注意

如果我改變我的家庭控制器,該行:

return view('projects',array('selected' => $project -> selected -> getUserList()->lists('id'))); 

到這一點:

return view('projects',array('selected' => Auth::user -> getUserList()->lists('id'))); 

它工作正常...

誰知道爲什麼現在有方法注入工作?

+0

首先,爲什麼在「 - >」之間使用空格?這讓我非常惱火,爲什麼一個名爲$ project的用戶對象?我不明白你的代碼,但你是否想要獲得與用戶關聯的所有項目?或者,也許一個項目的所有用戶?如果是,有一種更清晰的方式來使用口才,我可以告訴你。 – hfingler 2015-03-19 04:45:14

回答

0

簡短回答:Laravel不知道在鍵入提示用戶模型時該怎麼做。

再回應:由於登錄的用戶的信息目前被存儲在Laravel代碼驗證部分,一個選擇是TYPE-暗示在你的方法描述符Illuminate\Contracts\Auth\Guard接口(API docs)來獲取它的一個實例。

然後,您可以使用user屬性訪問反映當前登錄用戶的用戶模型的實例。這段代碼基本上就是你在這裏已經有的:Auth::user -> getUserList()->lists('id')

使用的Illuminate\Contracts內的Guard接口的好處是,如果一個包或服務供應商重新定義了具體落實的Guard接口(這樣做會被交換出去驗證您的應用程序是如何工作的原因),您的代碼將不會因爲與該界面定義的合同綁定而需要更改,而不是使用可能不再以相同方式運行的外觀Auth

希望這會有所幫助!隨意提問:)