2017-03-08 24 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でshow機能のために、私が持っている:ビューで

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

を、私は会社名($ projects->会社)とそのプロジェクトの従業員をそれぞれの部門と結び付けています。これらは動作しません:

$projects->employees->name

$projects->employees->department

を、私はこれらのプロパティにアクセスするにはどうすればよいですか?

--Update-- ジェフの答えの作品は、私は <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を必ず確認してください。

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

お知らせ:

アップデート2あなたは関連企業が戻って来ている、あなたはこのような何かを行うことができますどのように注文したい場合は

(あなたは自分のdepartmentが注文した従業員をしたいと仮定するとプロパティにアクセスしていない場合は、実行する前にクエリを変更できるように、関係メソッドemployees()を呼び出します。

注文照会のdocumentationへのリンクはありますが、StackOverflow questionもあります。

+0

こんにちはJeff、これらのプロパティはもう定義されていないので、これは機能します。しかし、私は@else($ employee->​​{{$ employee->名}}(== 'プロジェクトマネージャ' $ employee->部門) PM AM​​@ifのようなテーブルを設定しました部門== 'アカウントマネージャー'){{$ employee-> department}}これは、それぞれのセクションに正しい従業員を表示するためには機能しません。任意のアイデアをどのようにこれを修正するには? – 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> 

これは説明するのに役立ちます。

関連する問題