Laravel как получить поле профиля пользователя из отдельной таблицы - PullRequest
0 голосов
/ 05 марта 2020

Я новичок в Laravel, и Eloquent довольно сложно для меня понять. У меня есть пользователь и модель и таблица UserProfile. В таблице UserProfile есть поля user_id (FK для идентификатора пользователя), 'key и value.

Я хочу получить значения всех полей UserProfile, связанных с user_id. Вот мой код, но ничего не работает. Я уверен, что делаю некоторые глупые ошибки, но все еще учусь :) Laravel.

Модель UserProfile

class UserProfile extends Model
{
    public $timestamps = FALSE;

    protected $fillable = [
        'user_id',
        'key',
        'value',
    ];

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

Метод пользовательской модели

public function profileFields(){

    return $this->hasMany(UserProfile::class);

}

Миграция UserProfile

public function up()
{
    Schema::create('user_profiles', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->bigInteger('user_id')->unsigned();
        $table->string('key', 191);
        $table->longText('value');

        $table->foreign('user_id', 'user_profile_uid_fk')
              ->references('id')
              ->on('users')
              ->onDelete('cascade');

        $table->unique(['user_id', 'key'], 'user_profile_unique_key');
    });
}

Я пытаюсь получить поля профиля для пользователя, используя User::findOrFail(10)->profileFields, но это дает мне property not defined исключение.

Нужна помощь: Может ли кто-нибудь помочь мне заставить его работать, чтобы я мог получить все user_profiles поля из таблицы профиля?

Ошибка вывода (Тинкер)

> >> User :: findOrFail (10) -> profileFields

Освещение / База данных / QueryException с сообщением «SQLSTATE [42S02]: Базовая таблица или представление не найдено: 1146 Таблица 'velvetpaper.user_user_profile' didn ' t существует (SQL: выберите user_profiles. *, user_user_profile. user_id как pivot_user_id, user_user_profile. user_profile_id как pivot_user_profile_id из user_profiles внутреннее соединение user_user_profile на user_profiles . id = user_user_profile. user_profile_id, где user_user_profile. user_id = 10) '

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Отношение между users и user_profiles является отношением один ко многим.

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

0 голосов
/ 05 марта 2020

вы можете использовать объединение для реализации этого материала. вот так ... это построитель запросов

$data['profile']=DB::table(usertable)
->where('usertable.id',$id)
->leftjoin('userprofiletable','usertable.id','=','userprofiletable.user_id')
->first();

return view('profile_view',$data)

// view

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