2015-07-13 3 views
0

Я пытаюсь создать модель подписки на стиль для моего приложения. До сих пор у меня был небольшой успех, так что вы можете следить за другими пользователями и хранить, кто следит за тем, кто в базе данных. Однако у меня возникли проблемы с получением списка людей, которых придерживается текущий пользователь.User Follow/Subscription Модель отношений В Laravel

База данных:

пользователей таблицы (идентификаторы, first_name, last_name, электронная почта, пароль, лексем, временные метки)

подписки Таблица (идентификатор, user_id, subscriber_id, временные метки) модель

пользователь:

public function subscriptions() 
{ 
return $this->belongsToMany('App\User', 'subscriptions', 'user_id',  
'subscriber_id')->withTimestamps(); 
} 

public function subscribers() 
{ 
return $this->belongsToMany('App\User', 'subscriptions', 'subscriber_id', 
'user_id')->withTimestamps(); 
} 

Я использую этот код для получения всех текущих подписок пользователей (ака, кто они следующие)

$subscriber = Auth::user()->id; 


$user = User::find($subscriber); 


$userids = $user->subscriptions->lists('user_id'); 

return $userids; 

Теперь данный код возвращает нулевое значение. При дальнейшем исследовании это имеет смысл в качестве запроса, которая запускается неверно

SQL запросов:

select `user_id` from `users` inner join `subscriptions` on `users`.`id` = `subscriptions`.`subscriber_id` where `subscriptions`.`user_id` = 14 

Мой текущий набор вверх пытается искать неправильные вещи.

Если пользователь 1 следующим пользователям 2, 3 и 4, то мой код должен возвращать 2, 3 и 4.

Может кто-то пожалуйста, помогите исправить мои отношения настроить или код, который я бегу? Он должен искать user_id в таблице подписок на основе текущего пользователя-подписчика.

ответ

1

Итак, я поменял отношения подписчиков() и подписки(), и теперь он возвращает правильные данные. Я не понимаю, почему, но он определенно возвращает идентификаторы, которые я ожидал.

Я покажу вопрос открытым, если кто-нибудь с четким ответом на решение.

2

Laravel 5.3 Eloquent Relationships

Если вы проверить код в конце многие-ко-многим части, вы увидите эту строку кода.

return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id'); 

Здесь мы имеем «role_user» как сводная таблица (отношения), «user_id» который является внешним ключом в таблице отношений и первичного ключа в модели пользователя , и 'role_id' - это внешний ключ в таблице отношений и первичный ключ в модели ролей.

Так что, когда вы пытаетесь сделать это:

public function subscriptions() 
{ 
return $this->belongsToMany('App\User', 'subscriptions', 'user_id',  
'subscriber_id')->withTimestamps(); 
} 

Вы на самом деле принимает «subscriber_id» как внешнего ключа в вашей таблице отношений и первичный ключ для абонента , Поскольку функция пытается получить подписки, доступ к идентификатору абонента не будет выполнять эту работу. Вот почему, когда вы их сменили, они работали.

Результат должен выглядеть следующим образом:

public function subscribers() 
{ 
return $this->belongsToMany('App\User', 'subscriptions', 'user_id',  
'subscriber_id')->withTimestamps(); 
} 

public function subscriptions() 
{ 
return $this->belongsToMany('App\User', 'subscriptions', 'subscriber_id', 
'user_id')->withTimestamps(); 
} 
Смежные вопросы