Php Laravel 5中未定义的属性

Php Laravel 5中未定义的属性,php,mysql,laravel,eloquent,many-to-many,Php,Mysql,Laravel,Eloquent,Many To Many,我已经研究了回答相同错误的其他问题,我知道我有一个无法定义的属性,但不确定如何定义它。第一次使用多对多关系,所以我假设这就是问题所在 项目表 身份证件 公司 阶段 地位 开始日期 完成日期 时间戳 Employee表 身份证件 名称 部门 时间戳 Employee\u项目表 身份证件 雇员身份证 项目id 在这两种型号中,我都有BelongTomany,对于ProjectController中的show功能,我有: $projects=Project::find($id) 在视图中,我希望显示公

我已经研究了回答相同错误的其他问题,我知道我有一个无法定义的属性,但不确定如何定义它。第一次使用多对多关系,所以我假设这就是问题所在

项目表
身份证件
公司
阶段
地位
开始日期
完成日期
时间戳

Employee表
身份证件
名称
部门
时间戳

Employee\u项目表
身份证件
雇员身份证
项目id

在这两种型号中,我都有BelongTomany,对于ProjectController中的show功能,我有:

$projects=Project::find($id)

在视图中,我希望显示公司名称($projects->company)以及该项目中的员工及其各自的部门。这些方法不起作用:

$projects->employees->name

$projects->employees->department

如何访问这些属性

--更新-- 杰夫的回答很有效,但我摆了一张桌子
PMAM

@if($employee->department=='projectmanager'){{{$employee->name}

@else($employee->department=='accountmanager'){{{$employee->name}}@endif


这并不能在他们各自的部门中显示正确的员工。有没有办法解决这个问题?

你的问题是,
$project->employees
是一个集合,而不是一个员工的个体实例。您需要遍历集合才能访问每个员工的姓名:

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

看起来您可能需要按如下方式重新构造,我认为您可能希望整个if构造位于同一个表单元格中,尽管我可能错了:

<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>
请注意,您不再访问属性,而是调用关系方法
employees()
,以便在执行查询之前修改查询


这里有一个关于订购查询的链接,还有另一个链接。

因此,我找到了如何在表中的各自部门下显示正确的人员,我想与大家分享

感谢@jeff lambert,我添加了foreach循环,但我像在他的第一次更新中一样添加了整行。这不起作用,因为员工没有出现在各自的部门。例如,客户经理出现在项目经理下面。为了解决这个问题,我必须在每个循环中添加一个foreach循环

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

@foreach($projects->employees as$employee)
@如果($employee->department==‘项目经理’)
{{$employee->name}
@恩迪夫
@endforeach

希望这有助于解释。

嗨,Jeff,这确实有效,因为这些属性不再是未定义的。然而,我摆了一张像这样的桌子PMAM@if($employee->department=='Project Manager'){{{$employee->name}}@else($employee->department=='Account Manager'){{{$employee->department}}}这无法在其各自的部分中显示正确的员工。有没有办法解决这个问题?@robk27尝试将更新添加到您的问题中,很难判断我看到的是正确的还是复制/粘贴错误。添加了更新。让我知道它看起来是否正常,或者希望我进一步编辑。对不起。更新了我的代码。我的代码中有@endif,我希望这两个部分都有$employee->name。它是按照employee\u project表的顺序进行的,而不是使用if语句并检查$employee->department来输入相应的名称。我不确定我是否理解。问题是一些员工被排除在外,或者他们的展示顺序错误,还是其他什么?
$project->employees()->orderBy('department', 'DESC')->get();
<td>
  @foreach($projects->employees as $employee)
  @if($employee->department == 'Project Manager')
   {{ $employee->name }}
  @endif
  @endforeach
 </td>