【问题标题】:Laravel - Getting empty dataset when retrieving from DBLaravel - 从数据库中检索时获取空数据集
【发布时间】:2017-03-01 20:21:43
【问题描述】:

我正在尝试填充选择下拉列表,但没有看到值通过。

控制器:

public function create()
{
    $employees = Employee::get();

    $am = DB::table('employees')
        ->where('department', 'Account Manager')
        ->select('id', 'name')
        ->orderBy('name', 'asc')
        ->get();

    $pm = DB::table('employees')
        ->where('department', 'Project Manager')
        ->select('id', 'name')
        ->orderBy('name', 'asc')
        ->get();

    $employees->am = $am;
    $employees->pm = $pm;

    return view('projects/create', [
        'employees' => $employees
        ]);
}

查看:

<div class="form-group">
                  <label>Account Manager</label>
                  <select class="form-control" name="am">
                    <option value=""></option>
                    @foreach ($employees as $employee)
                      <option value="{{ $employee->am['id'] }}">{{ $employee->am['name'] }}</option>
                    @endforeach
                  </select>
                </div>
                <div class="form-group">
                  <label>Project Manager</label>
                  <select class="form-control" name="pm">
                    <option value=""></option>
                    @foreach ($employees as $employee)
                      <option value="{{ $employee->pm['id'] }}">{{ $employee->pm['name'] }}</option>
                    @endforeach
                  </select>
                </div>

所以,我知道有些东西在起作用,因为下拉菜单显示有 5 个空格,它们是数据库中的记录数,但它们都是空白的。执行 var_dump 显示它为 NULL。此外,它没有考虑 WHERE 子句,因为两个下拉菜单都显示 5 个空格,而不是项目经理的 3 个和客户经理的 2 个。

我的模型没有建立任何关系。它必须吗?因为我为不同的视图做了一个连接,它工作得很好。

我的数据库表如下所示:

项目:

id
name
am_id
pm_id

员工:

id
name
department

任何想法如何让值填充到下拉列表中?

【问题讨论】:

  • 你试过@foreach ($employees-&gt;am as $employee)吗?
  • 出错并显示“Undefined Property $am”
  • 如果你使用我上面所说的 foreach 修改,你也想改变你的&lt;option&gt; 代码。也许是这样:&lt;option value="{{ $employee-&gt;id }}"&gt;{{ $employee-&gt;name }}&lt;/option&gt;(我不确定$employee是一个数组还是一个对象。)
  • 谢谢!那行得通,但我想知道为什么这样我可以更好地理解它。我的另一个问题位于此处:stackoverflow.com/questions/41203590/… 能够以我原来的方式做到这一点。
  • 使用 laravelcollective.com/docs/5.3/html ,这是在 laravel 应用程序中在表单上生成选择元素的最简单方法

标签: php database laravel-5 eloquent


【解决方案1】:

你试过了吗?

$employeeAm = Employee::where('department', 'Account Manager')
        ->select('id', 'name')
        ->orderBy('name', 'asc')
        ->get();
$employeePm = Employee::where('department', 'Project Manager')
        ->select('id', 'name')
        ->orderBy('name', 'asc')
        ->get();

然后将 $employeeAm 和 $employeePm 传递给您的视图,然后在您的视图中

@foreach ($employeePm as $employee)
     <option value="{{ $employee->id }}">{{ $employee->name }}</option>
@endforeach

与您的 $employeeAm 相同

【讨论】:

  • 没有尝试过,我相信这会奏效。你将如何将这两个变量传递给视图? return view('projects/create', ['employeeAm' => $employeeAm, 'employeePm' => $employeePm]); ?你能向我解释为什么我的方法在之前的帖子中不起作用(链接在上面的 cmets 中)
  • 将这两个变量传递给您可以像这样使用的视图:
    return view('projects/create')-&gt;with('employeeAm', $employeeAm)-&gt;with('employeePm', $employeePm);
  • “employeeAm”和employeePm 是您将在视图中用于访问$employeeAm 和$employeePm 变量的名称。对我来说,我认为为什么您的方法不起作用,因为首先您只是将 $employees 变量从控制器传递到您的视图,因此他无法识别视图中的 $am 和 $pm 变量。
猜你喜欢
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 2021-09-24
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
相关资源
最近更新 更多