如何追加 Laravel 集合查询结果

问题描述

我有以下查询

$controls_checklists = collect();

foreach($active_evaluation_session->evaluation_items as $evaluation_item) {
    $controls_checklists->push(ControlsChecklist::where('macro_process_id',$evaluation_item->macro_process_id)
        ->where('process_id','like',$evaluation_item->process_id ? $evaluation_item->process_id : '%')
        ->where('status',1)->get());
}

$controls_checklists->all();


return view('auto-evaluations.index',compact('controls_checklists'));

在我看来,我有

@foreach ($controls_checklists as $controls_checklist)
<tr data-entry-id="{{ $controls_checklist->id }}">
    <td></td>
    <td>{{ $controls_checklist->control->control_reference }}</td>
    <td>{{ $controls_checklist->macro_process->name }}</td>
    <td>{{ $controls_checklist->process->name }}</td>
    <td>{{ isset($controls_checklist->sub_process->name)? $controls_checklist->sub_process->name: '' }}</td>
    <td>{{ isset($controls_checklist->activity->name)? $controls_checklist->activity->name: '' }}</td>
    <td>{{ $controls_checklist->checkpoint }}</td>
    <td>
        @if($controls_checklist->status == 1) {{ 'Active' }} @else {{ 'In Active' }} @endif
    </td>

    <td>
        <a href="{{ route('controls-checklists.edit',[$controls_checklist->id]) }}" class="btn btn-xs btn-info">@lang('global.app_evaluate')</a>
    </td>
</tr>
@endforeach

但是,当我打开页面时,我收到错误消息

Property [id] does not exist on this collection instance. (View: /opt/lampp/htdocs/controls-assessment/resources/views/auto-evaluations/index.blade.PHP) 

对于这一行

<tr data-entry-id="{{ $controls_checklist->id }}">

我认为由于我尝试合并上面的集合查询的方式,这不起作用。我该如何解决这个问题?

解决方法

您说得对,push() 不是将两个集合附加在一起的方式,而是使用 concat()

对于您的代码,将 push() 替换为 concat() 并将结果分配给相同的变量。

$controls_checklists = $controls_checklists->concat(
    ControlsChecklist::where('macro_process_id',$evaluation_item->macro_process_id)
        ->where('process_id','like',$evaluation_item->process_id ? $evaluation_item->process_id : '%')
        ->where('status',1)
        ->get()
);
,

首先 dd($controls_checklist); 并验证在 $controls_checklist->id 的位置确实存在 id。如果不改变foreach循环语句。

来到foreach循环,尝试使用join或innerjoin的模型来管理查询结果

谢谢

,

循环不会成功,因为您的变量返回的是集合的集合。

如果你愿意,你可以试试这个。

foreach($active_evaluation_session->evaluation_items as $evaluation_item) {
   $controlsChecklist = ControlsChecklist::where('macro_process_id',$evaluation_item->macro_process_id)
            ->where('process_id',$evaluation_item->process_id ? $evaluation_item->process_id : '%')
            ->where('status',1)->get();
   foreach ($controlsChecklist as $value) {
     $controls_checklists->push($value);
  }
}
,

您不必在新的集合变量中收集数据。

试试这个:

$query = ControlsChecklist::query();

foreach($active_evaluation_session->evaluation_items as $evaluation_item) {
    $query->where('macro_process_id',1);
}

return $query->get();


相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...