Php 我怎样才能在拉拉维尔的关系中找到一个支点?

Php 我怎样才能在拉拉维尔的关系中找到一个支点?,php,laravel,Php,Laravel,我的应用程序中有关系。一个候选人可以有几个“候选人培训”,每个“候选人培训”都与一个培训相关联。我希望避免将“候选人培训”作为首选,因为在分离时很难删除正确的值,等等。因此,在我的hasMany关系中,如何使用培训模型中的数据获取候选人培训模型 以下是我的人际关系: <?php namespace App; use App\Traits\SanitizeIds; use App\Salary; use Illuminate\Database\Eloquent\Model; use Il

我的应用程序中有关系。一个候选人可以有几个“候选人培训”,每个“候选人培训”都与一个培训相关联。我希望避免将“候选人培训”作为首选,因为在分离时很难删除正确的值,等等。因此,在我的hasMany关系中,如何使用培训模型中的数据获取候选人培训模型

以下是我的人际关系:

<?php

namespace App;

use App\Traits\SanitizeIds;
use App\Salary;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Storage;

class Candidate extends Model
{

    public function saveTraining($data) {
        $this->candidateTrainings()->delete();
        foreach(json_decode($data['training']) as $training) {
            if(Training::find($training->training)->first()) {
                $candidateTraining = new CandidateTraining;
                $candidateTraining->description = $training->value;
                $candidateTraining->training_id = $training->training;
                $this->candidateTrainings()->save($candidateTraining);
            }
        }
    }


    public function candidateTrainings() {
        return $this->hasMany('\App\CandidateTraining');
    }

    public function trainings() {
        return $this->belongsToMany('\App\Training');
    }

}


为了能够直接更新
CandidateTraining
模型上的数据,您需要向模型中添加
$filleble
字段

protected $fillable = ['training_id', 'description'];
你的代码应该可以工作!但如果你不介意的话,我做了一些重构。您可以通过另一种方式完成此任务:

<?php

namespace App;

use App\Traits\SanitizeIds;
use App\Salary;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Storage;

class Candidate extends Model
{
    public function saveTraining($data)
    {
        // remove all relationships
        $this->trainings()->detach();

        // add new ones
        foreach(json_decode($data['training']) as $training)
        {
            if(Training::find($training->training)->first())
            {
                $this->trainings()->attach($training->training, [
                    'description' => $training->value,
                ]);
            }
        }
    }

    public function candidateTrainings()
    {
        return $this->hasMany(App\CandidateTraining::class);
    }

    public function trainings()
    {
        return $this->belongsToMany(App\Training::class)
            ->withTimestamps()
            ->using(App\CandidateTraining::class)
            ->withPivot([
                'id',
                'training_id',
                'description',
            ]);
    }
}

protected $fillable = ['training_id', 'description'];
<?php

namespace App;

use App\Traits\SanitizeIds;
use App\Salary;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Storage;

class Candidate extends Model
{
    public function saveTraining($data)
    {
        // remove all relationships
        $this->trainings()->detach();

        // add new ones
        foreach(json_decode($data['training']) as $training)
        {
            if(Training::find($training->training)->first())
            {
                $this->trainings()->attach($training->training, [
                    'description' => $training->value,
                ]);
            }
        }
    }

    public function candidateTrainings()
    {
        return $this->hasMany(App\CandidateTraining::class);
    }

    public function trainings()
    {
        return $this->belongsToMany(App\Training::class)
            ->withTimestamps()
            ->using(App\CandidateTraining::class)
            ->withPivot([
                'id',
                'training_id',
                'description',
            ]);
    }
}

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Training extends Model
{
    protected $fillable = ['name_french', 'name_english'];

    public function candidates()
    {
        return $this->belongsToMany(App\Candidate::class)
            ->withTimestamps()
            ->using(App\CandidateTraining::class)
            ->withPivot([
                'id',
                'training_id',
                'description',
            ]);;
    }

    public function candidateTrainings()
    {
        return $this->hasMany(App\CandidateTraining::class);
    }
}

<?php

namespace App;

use Illuminate\Database\Eloquent\Relations\Pivot;

class CandidateTraining extends Pivot
{
    protected $fillable = ['training_id', 'description'];

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

    public function training()
    {
        return $this->belongsTo(App\Training::class);
    }
}

$candidates = Candidate::with(['trainings'])->get();
foreach ($candidates as $candidate)
{
    dd($candidate->pivot);
}