【问题标题】:Laravel 4.2 Sync multidimensional array in pivot tableLaravel 4.2 在数据透视表中同步多维数组
【发布时间】:2015-03-30 10:18:03
【问题描述】:

这些是我的带有关系函数的表格。

问题表

id
issueName

每个问题都有多个问题

在Issue.php模型中

public function questions() {
        return $this->hasMany('Question','issueID','id');
    }

问题表

id
issueID
questionText
questionScore

每个问题都属于一个Issue,都有对应的分数

在 Question.php 模型中

public function issues() {
        return $this->belongsTo('Issue');
    }

使用无线电输入,我为每个问题选择一个问题,并获取一个 questionID 数组,用于保存在数据透视表中的分数。

评估表

id
totalScore

在 Assessment.php 模型中

public function scores() {
            return $this->belongsToMany('Question','assessments_question_score','assessmentsID','id');
        }

在 Question.php 模型中

public function assessments() {
            return $this->belongsToMany('Assessment');
        }

assessments_question_score 表

id
assessmentsID
questionID
score

当我尝试同步 questionID 时,使用

为assessions_question_score 表评分
$assessments = New Assessment;
...
...
$assessments->save();
$assessments->scores()->sync($questionIDscore);

但它不起作用,同步多维数组是错误的还是我缺少的其他东西?我怎样才能做到这一点?

【问题讨论】:

  • 为什么关联函数中有“table”? return $this->belongsToMany('Question','assessments_question_score table','assessmentsID','id');应该是:return $this->belongsToMany('Question','assessments_question_score','assessmentsID','id');
  • 你用这个作为 questionIDscore 吗?数组(1 => 数组('score' => 10))
  • 另外,您没有在 belongsToMany 语句中指定枢轴。 return $this->belongsToMany('Question','assessments_question_score','assessmentsID','id')->withPivot('score');
  • 我认为这是一个错字,但不是在我的源代码中
  • $questionIDscore 是 questionID 和 score 的数组,所以如果我添加 withPivot('questionID', 'score');它适用于 $assessments->scores()->sync($questionIDscore);

标签: laravel-4 pivot-table


【解决方案1】:

评估.php

public function questions() {
   return $this->belongsToMany('Question','assessments_question_score','assessmentsID','questionID');
}

问题.php

public function assessments() {
    return $this->belongsToMany('Assessment','assessments_question_score','questionID','assessmentsID'););
}

然后您可以将问题与评估联系起来,如下所示:

$questionIds = array(2,5,6);

$assessment = new Assessment;
$assessment->save();
$assessment->questions()->sync($questionIds);

然后将 ID 为 2、5 和 6 的问题连接到评估。

获取第一个问题的分数:

$questionScore = $assessment->questions()->first->questionScore;

要获得所有问题的总分:

$totalScore = $assessment->questions()->sum('questionScore');

要获得所有问题的平均分:

$averageScore = $assessment->questions()->avg('questionScore');

来源:http://laravel.com/docs/4.2/eloquent#many-to-many 同时搜索“同步”。

【讨论】:

  • 它运行良好,没有之前的错误,但是当我编写 $assesment->questions()->sync(array_key($questionIds)); 时,我正在同步的数组运行良好但是 score 字段仍然为空,我可以将 score 字段的 array_values($questonIds) 以及基本上是问题表中的 id 的键传递给。
  • 那里没有重复字段吗?因为您在问题表和数据透视表(assessments_question_score)上有一个分数字段。您说所有问题都有固定分数,因此您只需要将分数字段放在问题表上即可。是否要在同步时编辑 questionScore?这是不可能的(据我所知)
猜你喜欢
  • 1970-01-01
  • 2020-11-04
  • 2018-10-27
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 2016-06-14
  • 2021-04-28
相关资源
最近更新 更多