красноречивое отношение один к одному - PullRequest
0 голосов
/ 12 октября 2019

У меня есть миграция Laravel, подобная этой

usergroups:

Schema::create('usergroups', function (Blueprint $table) {
    $table->integer('id')->primary();
    $table->string('name');
    $table->string('slug');
});

users:

Schema::create('users', function (Blueprint $table) {
    $table->integer('nik')->primary();
    $table->string('name');
    $table->string('username');
    $table->string('password');
    $table->string('telp', 15);
    $table->integer('usergroup_id');
    $table->rememberToken();
    $table->timestamps();
});
Schema::table('users', function ($table) {
    $table->foreign('usergroup_id')->references('id')->on('usergroups')->onDelete('cascade');
});

User модель

public function group()
{
    return $this->belongsTo(Usergroup::class, 'id');
}

Usergroup модель

public function user()
{
    return $this->hasMany(User::class, 'usergroup_id');
}

Я получаю пустые данные с этим

$petugas = User::find(1);
return $petugas->group;

кто-нибудь, помогите мне, пожалуйста ...

Ответы [ 3 ]

0 голосов
/ 12 октября 2019

Прежде всего, это не отношения Один-к-Одному. Это отношения Один ко Многим. Отношение, которое вы создали неправильно, согласно файлам миграции.

Блок кода отношения должен выглядеть следующим образом.

public function group()
{
    return $this->hasMany(Usergroup::class);
}

public function users()
{
    return $this->belongsTo(User::class);
}

Дополнительная информация:

В вашем сценарии возможны два факта.

  1. У пользователя много групп, но группа принадлежит только одному пользователю.
  2. В группе много пользователей, но пользователь принадлежит только к одной группе.

Факт 1: В этом случае столбец внешнего ключа должен располагаться в группах. Таблица. Для соблюдения соглашения сделайте имя внешнего столбца user_id в таблице groups. И код должен выглядеть следующим образом:

public function groups()
{
    return $this->belongsTo(Usergroup::class);
}

public function user()
{
    return $this->hasMany(User::class);
}

Факт 2: В этом случае столбец внешнего ключа следует поместить в таблицу пользователей. Для соблюдения соглашения сделайте имя внешнего столбца make group_id в таблице users. Код отношения должен выглядеть следующим образом:

public function group()
{
    return $this->hasMany(Usergroup::class);
}

public function users()
{
    return $this->belongsTo(User::class);
}
0 голосов
/ 13 октября 2019

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

public function group()
    {
        return $this->belongsTo(Usergroup::class,'usergroup_id');
    }

и это на модели группы пользователей

public function user()
    {
        return $this->hasMany(User::class,'usergroup_id');
    }
0 голосов
/ 12 октября 2019

Это не отношение «один к одному», т. Е. (У пользователя один телефон, и один телефон принадлежит одному пользователю)

В этом случае в группе много пользователей, Отношение один-ко-многим

Вы переносите таблицу пользователей дважды, перемещаете внешний ключ в миграцию

Schema::create('users', function (Blueprint $table) {
    $table->integer('nik')->primary();
    $table->string('name');
    $table->string('username');
    $table->string('password');
    $table->string('telp',15);
    $table->integer('usergroup_id');
    $table->foreign('usergroup_id')->references('id')->on('usergroups')->onDelete('cascade');
    $table->rememberToken();
    $table->timestamps();
});

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

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