繁体   English   中英

Laravel 5数据透视表额外字段

[英]Laravel 5 Pivot Table Extra Field

我想做的是,当创建一个新的候选人时,一个额外的字段会自动填充到连接数据透视表中,并带有一个随机的字符串。

这是我的数据透视表:

结果表(数据透视)

id  cert_number candidate_id    qualification_id
1   ?           17              2
2   ?           17              1
3   ?           57              1

所以在我的候选控制器中,我有:

public function store(CandidateRequest $request)
{
    $candidateInput = Input::get('candidates');


    foreach ($candidateInput as $candidate)
    {
        $candidate = Candidate::create($candidate);

        $candidate->centre()->attach(Auth::user()->centre);

        $qualification_id = $request->input('qualification_id');

        $candidate->qualification()->attach($qualification_id);

        $cert_number = Str::random(10);

        $candidate->qualification()->attach($cert_number);

    }

    return redirect('candidates');
}

它完美地添加了center_id和qualification_id,但不会将随机字符串插入cert_nubmer字段。

在我的候选人模型中,

public function result()
{
    return $this->hasMany('App\Result')->withTimestamps();
}

public function qualification()
{
    return $this->belongsToMany('App\Qualification', 'Results', 'candidate_id', 'qualification_id')->withPivot('status','cert_number','partial_claim')->withTimestamps();
}

在我的结果模型中:

public function candidate()
{
   return $this->belongsTo('App\Candidate')->withTimestamps();
}

public function qualification()
{
   return $this->belongsTo('App\Qualification');
}

谁能看到我的问题出在哪里?

谢谢。

附加不能那样工作。

让我取出两行代码:

$candidate->qualification()->attach($qualification_id);
$candidate->qualification()->attach($cert_number);

您试图将$ cert_number添加为qualification_id,这就是为什么它失败的原因。 当您这样做时,Laravel应该如何知道第二行($ cert_number)是一个额外的数据透视列? 没有。 您有两行代码完全相同,因此您不能期望Laravel知道第二行应该做一些不同的事情。

当您要将额外的数据插入其他数据透视表列时,需要将它们作为数组传递给第二个参数。 像这样:

$candidate->qualification()->attach($qualification_id, ['cert_number' => $cert_number]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM