Как правильно указать отношения между красноречивыми моделями - PullRequest
1 голос
/ 27 мая 2020

У меня есть следующие модели

ReleasePackages

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class ReleasePackages extends Model
{
    public $timestamps = false;

    /**
    */
    public function artifacts()
    {
        return $this->belongsToMany(
            'App\Models\Artifacts',
            'release_packages_artifacts',
            'release_package_id',
            'artifact_id'
        );
    }

    public function created_by()
    {
        return $this->hasOne('App\Models\Users', 'id');
    }

    public function approved_by()
    {
        return $this->hasOne('App\Models\Users', 'id');
    }
}

и Users

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Users extends Model
{
    public function release_packages()
    {
        return $this->hasOne('App\Models\ReleasePackages', 'created_by');
    }
}

Теперь для каждого пакета выпуска есть два столбца, которые связан с Users. Один - created_by, другой - approved_by. Я пытаюсь установить это отношение с помощью приведенного выше кода, но когда я вызываю

$packages = ReleasePackages::with(['artifacts','created_by','approved_by'])->get();

, я не получаю отношения с Users. У меня есть соответствующий идентификатор пользователя в таблице пользователей, а имя столбца - id. Я получаю следующий ответ из приведенного выше кода контроллера:

 #relations: array:3 [▼
        "artifacts" => Collection {#265 ▶}
        "created_by" => null
        "approved_by" => null
      ]

как я могу изменить код, чтобы отношения работали правильно?

1 Ответ

2 голосов
/ 27 мая 2020

Ваше отношение неверно для created_by() и approved_by(), оно должно быть принадлежит

public function created_by()
{
    return $this->belongsTo('App\Models\Users', 'created_by','id');
}

public function approved_by()
{
    return $this->belongsTo('App\Models\Users', 'approved_by','id');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...