【问题标题】:SQL Laravel GroupBy and show all recordsSQL Laravel GroupBy 并显示所有记录
【发布时间】:2017-05-16 09:39:26
【问题描述】:

我的数据库表具有以下结构:

staff_id column_id 数据

我正在尝试找到一种方法,以便我可以查看给定 staff_id 的所有 column_id 和数据字段

例如,staff_id 为 2 的记录可能有 6 条,staff_id 为 1 的记录可能有 33 条。

现在我需要得到这个,这样我就有了一个可以循环的数组,它将为我提供所有数据。

所以在 PHP 中是这样的:

foreach($staffs as $staff) {
    foreach($staff->datas as $data) {
        echo $data->column_id . " - " . $data->data . "<br />";
    }
    echo "<hr />";
}

我查看了 GroupBy,但分组时似乎只返回一个结果。

我正在使用 Laravel。

【问题讨论】:

  • $staffs 是Illuminate\Support\Collection 的实例吗?

标签: php mysql sql laravel


【解决方案1】:

员工模型

  public function datas(){
      return $this->hasMany(DataTable::class,'staff_id');
   }

现在你可以使用了:

$staffs=Staff::with('datas')->get(); // get data with relltionships

foreach($staffs as $staff) {
    foreach($staff->datas as $data) {
        echo $data->column_id . " - " . $data->data . "<br />";
    }
    echo "<hr />";
}

【讨论】:

  • 嘿只是想看看你是否对此有任何想法:这使得两个 foreach 循环成为必要是吗?那么,如果我想通过制作$staff[$data-&gt;column_id] = $data-&gt;data; 来扁平化每个 $staff,我可以使用嵌套的 for 循环来做到这一点,但想知道是否有办法在没有嵌套的 for 循环的情况下做到这一点?谢谢
【解决方案2】:

使用Illuminate\Support\Collection,您可以:

$staffs->groupBy(function ($staff) {
    return $staff->staff_id;
});

【讨论】:

    【解决方案3】:

    假设我有列表表,这是结构

    lists
    -------
    
    id | staff_id | column_id (int) | data(string) | 
    

    现在我创建 ListController 并编写方法 getstaff() 来返回staff_id 的特定数据

     public function getstaff($id){
         $staffs = List::where('staff_id','=',$id)->get();
         return $staffs;
       }
    

    现在你可以在刀片中显示

    @foreach($staffs as $staff)
        <li>{{$staff->column_id}}</li>
        <li>{{$staff->data}}</li>
       @endforeach
    

    【讨论】:

    • 如果我不想获取特定的 staff_id 并将它们全部作为嵌套数组获取。
    猜你喜欢
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多