chelkaz
@chelkaz

Laravel Не ужиле так сложно. Eloquent ORM — Один к одному?

Есть таблица пользователи и таблица с их фото.
Есть две модели. User и Photo_user
В модели User:
public function GetUserPhoto () {
        return $this->hasOne('App\Models\Photo_user');
  }

В шаблоне вывожу так:
echo \App\Models\User::find(Auth::user()->id)->GetUserPhoto->name;


А на возможно сделать что то вроде этого?
В модели User
public function GetUserPhoto () {
        return Photo_user::where('user_id', $this->id)->first()->name;
  }

И выводить \App\Models\User::GetUserPhoto(); ?
Но работает только по первому варианту. Второй не как не работает.
  • Вопрос задан
  • 692 просмотра
Пригласить эксперта
Ответы на вопрос 2
JhaoDa
@JhaoDa
LaravelRUS Team
В модели
public function getPhotoNameAttribite()
{
    return $this->GetUserPhoto->name;
}

, в шаблоне
echo \App\Models\User::find(Auth::user()->id)->photoName;

Об этом написано в документации — https://laravel.com/docs/5.2/eloquent-mutators#acc...

И вообще, ваш код ужасен. Читайте доку.
Ответ написан
wielski
@wielski
✔ Совет: Вам помогли? Отметьте ответы решением.
У вас вообще есть хотя-бы малейшее понимание того, что такое MVC?
Вы действительно в view выводите ЭТО?
echo \App\Models\User::find(Auth::user()->id)->GetUserPhoto->name;


Во первых, Auth::user() и так содержит объект модели User. Зачем получать id из модели, и снова делать запрос к базе?
Моментально вывод сокращается к следующему виду:
{{ Auth::user()->GetUserPhoto->name }}

Идем далее.
В модели User создаем связь ПРАВИЛЬНО:
public function userPhoto() {
    return $this->hasOne('App\Models\Photo_user'); // Советую называть модели как нормальные люди. UserPhoto - как вариант. Забудьте нижнее подчеркивание, весь Laravel - это CamelCase.
}


Там же создаем аттрибут userPhoto:
public function getUserPhotoAttribute(){
     if ( ! array_key_exists('userPhoto', $this->relations))
	 $this->load('userPhoto');

     $related = $this->getRelation('userPhoto')->first();

     return ($related) ? $related->name : false; // выводим userPhoto->first()->name
}


Теперь можем без проблем использовать
{{ Auth::user()->userPhoto }}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы