Не могу загрузить отношения один-к-одному в Laravel

В Laravel 5.2 я пытаюсь загрузить пользователя вместе с его настройками пользователя следующим фрагментом кода: App\User::with('usersettings')->get(), но это не удается, и я не могу понять, почему. Это данная ошибка.

BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::usersettings()'

я прочел документы по Laravel и я много смотрел Laracasts, и это работало раньше, поэтому я понял, что мне не хватает чего-то очень маленького и, вероятно, очевидного.

User.php

<?php

namespace App;

/* User with fields: id, email */
class User extends Illuminate\Database\Eloquent\Model {
protected $table = 'users';

public function usersettings() {
return $this->hasOne("App\Usersettings", "userid");
}
}

Usersettings.php

<?php

namespace App;

/* Settings with fields: id, userid, textcolor */
class Usersettings extends Illuminate\Database\Eloquent\Model {
protected $table = 'usersettings';

public function user() {
return $this->belongsTo('App\User', 'userid');
}
}

// Редактировать: я уже пробовал нижний регистр s. Эта опечатка могла быть скрытой при копировании в SO, но ошибка была и есть, даже после исправления.

//Редактировать:

<?php

namespace App;

use App\UserSettings;

class User extends Illuminate\Database\Eloquent\Model {
protected $table = 'users';

public function settings() {
return $this->hasOne(UserSettings::class, "userid");
}
}

Если я бегу php artisan tinker>>> App\User::with('settings')->get()работает как положено, но ниже

<?php

namespace App;

use App\UserSettings;

class User extends Illuminate\Database\Eloquent\Model {
protected $table = 'users';

public function usersettings() {
return $this->hasOne(UserSettings::class, "userid");
}
}

дает BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::usersettings()' когда я бегу php artisan tinker >>> App\User::with('usersettings')->get(), Аналогично, когда я переименую метод в abc и беги php artisan tinker >>> App\User::with('abc')->get() (что тоже не получается)

0

Решение

Вы опечатали при определении отношения на модели User:

public function usersettings() {
return $this->hasOne("App\Usersettings", "userid");
}

Я хотел бы предложить некоторые очистки:
назовите таблицы ‘users’ и ‘user_settings’,
переименуйте поле ‘userid’ в ‘user_id’,
переименуйте модель «Usersettings» в «UserSettings».

Таким образом, вам не нужно явно определять имена таблиц и внешние ключи, потому что вы следуете соглашениям, и Laravel может их «угадать».

Вы также можете переименовать отношение «usersettings ()» в «settings ()», поскольку очевидно, что это пользовательские настройки. Затем вы можете получить его как: ‘User :: with (‘ settings ‘) -> get ()’.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]