два внешних ключа одной и той же таблицы (совпадение двух профилей) в eloquent laravel - PullRequest
0 голосов
/ 20 апреля 2020

У меня проблемы с реализацией отношений. У меня есть таблица "match_profils" и "profils". «match_profils» содержит два внешних ключа «profils». У меня есть проблема, чтобы сделать отношения с моделями. Вот моя модель:

class MatchProfil extends Model
{
    use Notifiable;

    public $timestamps = FALSE;
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'id','profil_id2','etat',
    ];


    public function  profilEtudiant()
    {
        return $this->belongsTo('App\profil')->where('profil.id','=','match_profils.id');
    }

    public function profilRetraite()
       {
           return $this->belongsTo('App\profil')->where('profil.id','=','match_profils.profil_id2');
       }
} 

И Profil Модель:

class Profil extends Model
{


    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
      'nom', 'prenom', 'mail_famille', 'telephone_famille', 'propositions_passions', 'propositions_activites','avatar','type',
    ];
    /**
         * Get the comments for the blog post.
         */
        public function activites()
        {
            return $this->belongsToMany('App\Activite', 'activite_profil');
        }

        public function passions()
        {
          return $this->belongsToMany('App\Passion', 'passion_profil');
        }

        public function autrePassions()
        {
          return $this->belongsToMany('App\AutrePassion', 'autre_passion_profil');
        }

        ....


        public function matchEtudiant()
        {
        return $this->hasOne(MatchProfil::class, 'id');
        }

        public function matchRetraite()
        {
        return $this->hasOne(MatchProfil::class, 'profil_id2');
        }


}

Проблема заключается в том, когда я пытаюсь сохранить матч, как это:

$match = new MatchProfil(['etat' => 'en attente']);
                   $profilDBEtudiant = Profil::find($profilEtudiant);
                   $profilDBRetraite = Profil::find($profilRetraiteMeilleur);

                   $profilDBEtudiant->matchEtudiant()->save($match);
                   $profilDBRetraite->matchRetraite()->save($match);

Поле profil_id2 остается пустым в базе данных, как я полагаю, чтобы правильно реализовать это отношение? Благодаря.

1 Ответ

0 голосов
/ 21 апреля 2020

Я нашел решение. Сначала я назвал поле «id» (в первом посте) профилем «profil_id1» для профиля студентов, но когда увидел, что записи для matchEtudiant () и matchRetraite () нужно обновить поле «id», я переименовал поле "profil_id1" в "id", но это не решило проблему обновления matchRetraite (). Итак, я просто поместил дополнительное поле «id» с автоматическим приращением в базу данных и переименовал «предыдущий идентификатор для студента» в «profil_id1». Теперь классы выглядят так: класс Profil:

  public function matchEtudiant()
        {
        return $this->hasOne(MatchProfil::class, 'profil_id1');
        }

        public function matchRetraite()
        {
        return $this->hasOne(MatchProfil::class, 'profil_id2');
        }

и класс MatchProfil:

public function  profilEtudiant()
    {
        return $this->belongsTo('App\profil')->where('profil.id','=','match_profils.profil_id1');
    }

    public function profilRetraite()
    {
         return $this->belongsTo('App\profil')->where('profil.id','=','match_profils.profil_id2');
    }

И это сработало. Теперь все в порядке для моих отношений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...