【问题标题】:group the result fetched through find - laravel eloquent对通过 find 获取的结果进行分组 - laravel eloquent
【发布时间】:2019-08-06 05:47:28
【问题描述】:

我有一个名为 generalmembers 的表。我有我想分组的名为 designation_name 的 col。

我面临的问题是我使用了基于 ID 的 Eloquent 关系,

$generalmembers = Generalpresident::findOrFail($id)->generalmembers;

上面的查询产生了我的结果,但是我如何根据 designation_name 对结果进行分组,

@foreach ($generalmembers as $generalmember)
    <tr>
        <td>
            {{$generalmember->first_name}}
        </td>
        <td> 
            {{$generalmember->generaldesignations->designation_name}} 
        </td>
    </tr>
@endforeach

关系:

class Generalpresident extends Model
{
    public function generalmembers(){
        return $this->hasMany('App\Generalmembers', 'president_id' , 'id');
    }
}


class Generalmembers extends Model
{
   public function generalpresidents(){
        return $this->belongsTo('App\Generalpresident','president_id');
    }
}

我该怎么做?

【问题讨论】:

  • 你能告诉我表关系吗?
  • @Amy 我已将关系添加到问题中。请检查
  • 澄清一下,您是要将generalmembers 分组为designation_name 还是generalpresidents?另外,你能解释一下你想如何使用这些数据吗?
  • designation_name 在generalmembers 表中。我想根据这个对结果进行分组

标签: sql database laravel laravel-5 eloquent


【解决方案1】:

试试:

$generalmembers = Generalpresident::findOrFail($id)->generalmembers()->groupBy('designation_name');

【讨论】:

  • 我之前试过 tit,得到这个错误,调用未定义的方法 Illuminate\Database\Eloquent\Relations\HasMany::isEmpty()
  • 抱歉,我使用的是@if (!$generalmembers->isEmpty()) 条件。我现在删除了它。但是上面的查询没有产生任何结果
  • findOrFail($id) 接受一个 id 并返回一个模型。如果不存在匹配的模型,则会引发错误...为什么要在其上放置 groupBy?
【解决方案2】:

如果您期望多个项目,您应该使用它:

$generalmembers = Generalpresident::with('generalmembers')
                                  ->where('id','=', $id)
                                  ->groupBy('designation_name')
                                  ->get();

【讨论】:

  • 我在哪里加入 generalmember 表。因为designation_name一般是member
  • 感谢 Alphy 的查询,查询的结果来自 Generalpresident 而不是 generalmembers。
【解决方案3】:

试试:

Generalmembers::whereHas('generalpresidents',function($q){
  $q->where('id',2);
})->select('designation_name')->groupBy('designation_name)->get();

【讨论】:

    【解决方案4】:

    感谢所有花时间回答我的问题的人。对此,我真的非常感激。

    我确实找到了一种解决方法,我没有在控制器上工作,而是将它带到刀片上。

    @foreach ($generalmembers->groupby('designation_name') as $generalmember)
         @foreach ($generalmember as $item)
           {{$item->first_name}}
         @endforeach
    @endforeach
    

    如果推荐这个,我将不胜感激。

    【讨论】:

      猜你喜欢
      • 2014-01-03
      • 2013-10-01
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      相关资源
      最近更新 更多