2017-03-08 70 views
1

我已經看過其他問題已經回答了這個相同的錯誤,我明白我有一個屬性,無法定義,但不知道如何使其定義。第一次使用多對多關係,所以我假設這是問題。未定義財產Laravel 5

Project Table id company stage status date_started date_finished timestamps

Employee Table id name department timestamps

Employee_Project Table id employee_id project_id

在這兩種模式,我有belongsToMany並在ProjectController顯示功能,我有:

$projects = Project::find($id);

在視圖,我想顯示公司名稱($ projects->)公司)以及該項目的員工及其各自的部門。這些不工作:

$projects->employees->name

$projects->employees->department

如何訪問這些屬性?

--Update-- Jeff的答案的作品,但我建立了一個表像 <thead><th>PM</th><th>AM</th></thead>

<tbody><td>@if($employee->department == 'Project Manager'){{ $employee->name }}</td>

<td>@else($employee->department == 'Account Manager'){{ $employee->name }}</td></tbody>@endif

這並不工作,以顯示正確的員工在各自的章節。任何想法如何解決這一問題?

回答

2

你的問題是$project->employees是一個集合,而不是一個僱員的個體實例。您需要遍歷集合,以訪問每個員工的名字:

foreach($project->employees as $employee) { 
    echo $employee->name; 
    echo $employee->department; 
} 

更新

看起來你可能需要如下重組,我想你可能想整個如果構造是相同的表格單元格中,雖然我可能是錯的:

<tbody> 
    @foreach($project->employees as $employee) 
    <tr> 
     <td> 
     @if($employee->department == 'Project Manager') 
      {{ $employee->name }} 
     @elseif($employee->department == 'Account Manager') 
      {{ $employee->department }} 
     @else 
      <!-- What about non project/account managers? --> 
     @endif 
     </td> 
    </tr> 
    @endforeach 
</tbody> 

我可能是完全錯誤的,也許你希望客戶經理和項目經理在不同的列:

<tr> 
    <td> 
    @if($employee->department == 'Project Manager') 
     {{ $employee->name }} 
    @endif 
    </td> 
    <td> 
    @if($employee->department == 'Account Manager') 
     {{ $employee->name }} 
    @endif 
    </td> 
</tr> 

請務必查看Blade if語句上的documentation

更新2

如果您想訂購如何相關實體都回來了,你可以這樣做(假設你想通過自己的department下令員工:

$project->employees()->orderBy('department', 'DESC')->get(); 

公告您不再訪問屬性,您正在調用關係方法employees(),以便您可以在執行查詢之前修改它。

下面是關於訂購查詢的documentation的鏈接,其上還有另一個StackOverflow question

+0

嗨,傑夫,這確實有用,因爲這些屬性不再是未定義的。不過,我建立了一個表像 PM AM​​@if($員工 - >部門== '項目經理'){{$員工 - >名}}​​@else($員工 - >部門=='客戶經理'){{$員工 - >部門}}並且這不起作用以顯示他們各自部分中的正確員工。任何想法如何解決這一問題? – robk27

+0

@ robk27嘗試在你的問題中添加更新,如果我看到的是正確的或僅僅是複製/粘貼錯誤,則有點難以辨認。 –

+0

添加了更新。讓我知道,如果它看起來確定或要我進一步編輯。 – robk27

0

所以我想出瞭如何顯示正確的人出現在他們各自的部門在表中,我想分享。

感謝@ jeff-lambert我添加了foreach循環,但是我在第一次更新中添加了整行。這不起作用,因爲員工沒有出現在各自的部門。例如,客戶經理出現在項目經理之下。要解決這個問題,我不得不爲每個添加一個foreach循環。

<td> 
    @foreach($projects->employees as $employee) 
    @if($employee->department == 'Project Manager') 
    {{ $employee->name }} 
    @endif 
    @endforeach 
</td> 

希望這有助於解釋它。

相關問題