在Laravel多对多关系中按列获取行

克里斯蒂安·托雷斯(Cristian Torres)

Laravel多对多关系

嗨,我被困在试图按周从数据库中获取数据。

我有一张桌子(多对多关系)

  1. 例程:id,plan_id,user_id。
  2. 练习:ID,名称,描述,图像。
  3. exercise_routine:id,例程ID,exercise_id,星期,天。

关系

常规

public function exercises() {
    return $this->belongsToMany(Exercise::class)->withPivot('week', 'day', 'completed')->orderBy('week','asc');;
}

行使

public function routines() {
    return $this->belongsToMany(Routine::class)->withPivot('week', 'day', 'completed');
}

我想像这样每周获取所有行。

    Json example:
    {
      "week": [
        1: {
         "exercises": [
           {
             "name": "Abs"
           }
         ]
        },
        2: {
         ...
        }
      ]

    }

我已经尝试过了

 if(!empty($routine)) {

            foreach ($routine->exercises as $exercise) {
                $week = $exercise->pivot->week;

                if($week == $previous_week) {
                    array_push($this->weeks, $exercise->pivot->week);
                } else {
                    array_push($this->weeks, [
                        $exercise->pivot->week => $exercise->pivot->week
                    ]);
                }

                $previous_week = $exercise->pivot->week;

            }

//            dd($this->weeks);

//            return DB::table('exercise_routine')->where('routine_id',$routine->id)->max('week');
        }

说明

exercise_routine表中有一个星期编号,用于按周分隔锻炼。我需要创建一个数组,如果week是1,则将数组推入1,如果下一个是1,则将数组推入同一数组。如果下一个是2或不同,则按2。

我不确定您是否能理解我的意思,它只是在努力寻找实现的方法。

提前谢谢了。

日军

使用收集方法mapToGroups可以帮助您简化对的分组exercises

这是一个有关如何在您的情况下使用的示例:

if(!empty($routine)){
  // creating groups of exercise by week [1 => ['abs'], 2 => []]
  $exerciseWeeks = $routine->exercises->mapToGroups(function($exercise, $k){
      return [$exercise->pivot->weeks => $exercise->name];
    })
    ->map(function($exerciseInWeek, $k){ // creating your json format from here point on
      $weekObj = new \stdClass;
      $weekObj->exercises = [];
      foreach($exerciseInWeek as $exerciseName){
        $exerciseObj = new \stdClass;
        $exerciseObj->name = $exerciseName;
        $weekObj->exercises[] = $exerciseObj;
      }
      return $weekObj;
    });

  // creates the final json object
  $routineObj = new \stdClass;
  $routineObj->week = $exerciseWeeks->all();

  $finalRoutineJSON = json_encode($routineObj);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Laravel从多对多关系中获取数据

来自分类Dev

在多对多关系中按字段排序(Laravel)

来自分类Dev

Laravel中的多对多关系

来自分类Dev

如何在Laravel中从多对多关系的一对多关系中获取项目?

来自分类Dev

从多对多关系中获取结果

来自分类Dev

从多对多关系中获取过滤数据

来自分类Dev

Laravel中的多对多关系:belongsToMany()与hasManyThrough()

来自分类Dev

在laravel中查看多对多关系

来自分类Dev

多对多关系中的条件分离laravel

来自分类Dev

在多对多关系中搜索 Laravel

来自分类Dev

Laravel多对多关系

来自分类Dev

Laravel多对多关系

来自分类Dev

与Laravel的多对多关系

来自分类Dev

在多对多关系中包含重复行

来自分类Dev

执行 SQL 查询以在多对多关系中按成分 ID 获取鸡尾酒

来自分类Dev

Laravel从多对多关系中创建1-1关系

来自分类Dev

PHP-Laravel 以多对多关系从数据透视表中获取数据

来自分类Dev

更新laravel 5.2中多对多关系表中存在的列

来自分类Dev

Laravel:获取特定于多对多关系的数据透视

来自分类Dev

Laravel从数据透视表获取数据的多对多关系

来自分类Dev

获取 '_set' 的多对多关系

来自分类Dev

休眠中带有多列的多对多关系

来自分类Dev

休眠中带有多列的多对多关系

来自分类Dev

如何使用laravel在多对多关系中检索特定列的嵌套值

来自分类Dev

在laravel中与模型工厂建立多对多关系-列不能为空错误

来自分类Dev

laravel同步多对多关系

来自分类Dev

Laravel:订购多对多关系

来自分类Dev

Laravel有多对多关系

来自分类Dev

Laravel 4多对多关系