2016-10-08 3 views
0

Я начал использовать laravel пару дней назад. У меня большой опыт работы в других средах, но я немного расправляюсь с Eloquent ORM и отношениями.Laravel получить все с отношениями

Скажите, что у пользователя есть другой стол с его статистикой. Я создаю эти отношения. Теперь у пользователя также много сообщений, поэтому я объявляю это тоже.

class User extends Authenticatable 
{ 
    public function userDynamic() 
    { 
     return $this->hasOne('App\UserDynamic', 'user_id', 'id'); 
    } 

    public function posts() 
    { 
     return $this->hasMany('App\Post'); 
    } 
} 

В других моделях теперь мы имеем:

class UserDynamic extends Model 
{ 
    public function user() 
    { 
     return $this->belongsTo('App\User'); 
    } 

} 

И:

class Post extends Model 
{ 
    public function user() 
    { 
     $this->belongsTo('App\User','user_id','id'); 
    } 
} 

Я думаю, что у меня есть это право далеко. Проблема возникает при попытке получить их. Для одного пользователя Я в порядке, потому что я не могу

$user (get user from auth token) 
$user->stats = $user->userDynamic()->first(); 
$user->posts = $user->posts()->paginate($this->profilePagination); 

это хорошо, я получаю пользователь с статистикой атрибутов, содержащей всю информацию и постами в сообщениях атрибутов.

Как всегда, если я пытаюсь получить всех пользователей, как показано ниже

$users = User::with('userDynamic')->active()->notPrivate(); 
return $users->paginate($this->followersPagination); 

Все пользователи возвращаются как так

{ 
     "id": 26, 
     "name": "LL", 
     "url": "", 
     "personal_quote": "", 
     "private": "0", 
     "active": "1", 
     "user_dynamic": { 
     "user_id": 26, 
     "following_count": 7, 
     "followers_count": 0, 
     "posts_count": 0, 
     "likes_count": 0 
     } 

Как я могу изменить имя атрибута, что они назначены? Вместо user_dynamic сказать, как статистика.

+0

Просто переименовать 'userDynamic()' функцию к тому, что когда-либо вам нравится. –

ответ

0

Если вы намерены держать имя вашего userDynamic отношения, то вы можете просто добавить псевдоним для этого отношения:

public function stats() 
{ 
    return $this->userDynamic(); 
} 
+0

Я вижу, отлично !! И что, если я хотел сделать то же самое для сообщений? Как я могу это назвать? Также быстрый вопрос. Если я добавляю сообщения, это делает другой X (количество запросов пользователей к БД или использует JOIN)? – LefterisL

+1

Насколько я знаю, активные отношения загрузки (как вы здесь делаете) в основном оптимизируют ваши запросы, чтобы свести к минимуму количество вызовов в БД, используя объединения и т. Д. Если вы хотите загружать сообщения в то же время, что и статистика, просто добавьте его к методу 'with' по вашему красноречивому запросу, например 'with (['posts', 'stats']' и ваши связанные сообщения тоже будут загружены :) –

+0

Да, удалось найти это после нескольких поисков. Ценить это! – LefterisL

Смежные вопросы