Как определить отношения Laravel, когда связаны несколько столбцов
У меня есть модели, как я уже упоминал ниже: как на нем можно реализовать eloquent-отношения laravel?
Модель пользователя
id
name
Почтовая модель
id
title
desc
created_by = foreign key on User->id
Первый этап (PostStage OneModel)
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
Этап шестой (PostStage SixModel)
post_id
assigned_by = foreign key on User->id
assigned_to = foreign key on User->id
3 ответа
Решение
Я сделал это, определив следующие отношения
В модели 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');
}
В почтовой модели
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');
}
Отношения могут указывать, какой столбец они используют:
public function assigner(){
return $this->belongsTo(User::class, 'assigned_by');
}
public function assignee(){
return $this->belongsTo(User::class, 'assigned_to');
}
Модель пользователя должна иметь hasMany
тип отношений, как показано ниже:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
//...
public function posts() {
return $this->hasMany(Post::class);
}
}
Сообщения принадлежат пользователям через атрибут made_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');
}
}
надеюсь, это поможет