Как определить отношения Laravel, когда связаны несколько столбцов - PullRequest
0 голосов
/ 24 октября 2018

У меня есть модели, как я уже упоминал ниже, как на нем можно реализовать llovel eloquent-Relations?

Модель пользователя

id
name

Почтовая модель

id
title
desc
created_by = foreign key on User->id

Стадия первая (PostStageOneModel)

id
post_id
assigned_by
assigned_to

Вторая стадия (PostStageTwoModel)

post_id
assigned_by  = foreign key on User->id
assigned_to  = foreign key on User->id

Третья стадия (PostStageThreeModel)

post_id
assigned_by  = foreign key on User->id
assigned_to  = foreign key on User->id

Стадия четыре (PostStageFourModel)

post_id
assigned_by  = foreign key on User->id
assigned_to  = foreign key on User->id

Стадия пять (PostStageFiveModel)

post_id
assigned_by  = foreign key on User->id
assigned_to  = foreign key on User->id

Стадия шесть (PostStageSixModel)

post_id
assigned_by  = foreign key on User->id
assigned_to  = foreign key on User->id

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Модель пользователя должна иметь тип отношений hasMany, как показано ниже:

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
    //...
    public function posts() {
        return $this->hasMany(Post::class);
    }
}

Сообщения принадлежат пользователям через атрибут create_by

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model {
    //...
    public function createdBy() {
        return $this->belongsTo(User::class, 'created_by');
    }
}

PostStageOneModel принадлежит сообщениям и пользователям, использующим 2различные атрибуты

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class PostStageOneModel extends Model {
    //...
    public function post() {
        return $this->belongsTo(Post::class);
    }
    public function assignedTo() {
        return $this->belongsTo(User::class, 'assigned_to');
    }
    public function assignedBy() {
        return $this->belongsTo(User::class, 'assigned_by');
    }
}

надеюсь, что это поможет

0 голосов
/ 24 октября 2018

Я сделал это, определив следующие отношения

В модели PostStageOneModel

public function assignedPost() {
    return $this->belongsTo(Post::class, 'post_id', 'post_id');
}

public function assigner()
{
    return $this->belongsTo(User::class, 'assigned_by', 'id');
}

public function assignee()
{
    return $this->belongsTo(User::class, 'assigned_to', 'id');
}

В модели Post

public function identifiedBy() {
    return $this->belongsTo(User::class, 'identified_by', 'id');
}

public function postAssignedBy() {
    return $this->hasManyThrough(User::class, PostStageOneModel::class, 'post_id', 'id', 'post_id', 'assigned_by' );
}

public function postAssignedTo() {
    return $this->hasManyThrough(User::class, PostStageOneModel::class, 'post_id', 'id', 'post_id', 'assigned_to' );
}

в модели пользователя

public function assigned()
{
    return $this->hasMany(PostStageOneModel::class, 'assigned_by', 'id');
}

public function assignedTo()
{
    return $this->hasMany(PostStageOneModel::class, 'assigned_to', 'id');
}
0 голосов
/ 24 октября 2018

Отношения могут указывать, какой столбец они используют:

public function assigner(){
    return $this->belongsTo(User::class, 'assigned_by');
}
public function assignee(){
    return $this->belongsTo(User::class, 'assigned_to');
}
...