[Laravel] hasOne のリレーションを設定しているのに保存されない

結論

どっか間違ってるんで再確認を。自分の場合は hasOne() を設定するメソッド名を複数形にしてました…。

詳細

Laravel-Admin 導入しておりまして、最初に hasMany だったリレーションを hasOne に変更したんです。

この場合、公式ドキュメントにあるように、Laravel-Admin 用のコントローラー内で

$form->text('profile.age');

と記載します。

(User に対して Profile というモデルが存在している、という設定。)

hasMany の場合は

$form->hasMany('profiles', function (Form\NestedForm $form) {
    $form->text('age');
    $form->datetime('completed_at');
});

と書くんですが、hasOne で 1:1 の関係になると

$form->text('profile.title');
$form->datetime('profile.completed_at');

という書き方に。

この時に profiles → profile のように単数形に変わる、というのは気づいて変えていたんですが、

Model 側の設定が

class User extends Model
{
    public function profiles()
    {
        return $this->hasOne(Profile::class);
    }
}

ってしたままになってました。

正解は

public function profile()

と、単数形なのでした…。ガックリ。