2014-09-10 5 views
0

У меня есть одна проблема, где мне нужна помощь. Я делаю один проект в учебных целях.Laravel Eloquent - Table join

У меня есть 2 таблицы, то первый из них является

ПОЛЬЗОВАТЕЛЕЙ, которые содержат идентификатор (PK, AI), имя пользователя, адрес электронной почты, пароль и так далее ...

Другая таблица называется

ДРУЗЬЯ

содержат user_a (FK для users.id), Пользователя (FK для users.id), статус (0 - в ожидании, 1 - подтверждено) ...

Допустит, текущий пользователь вошедший имеет ID 1.

мне нужно присоединиться к этой 2 таблицы и получить полный список друзей для текущего пользователя, так запросы корыта таблицы друзей, где user_a или = Пользователь В настоящее время регистрируется идентификатор пользователя и получить все данные (от пользователей таблицы) для своего друга ... Так что позволяет сказать:

user_a = 1, = 2 Пользователь B userb_a = 3, = 1 Пользователь B

Мне нужно, чтобы получить информацию для пользователей 2 , 3.

Надеюсь, вы понимаете, что я необходимость.

Btw Я знаю, как это сделать без использования Красноречивого материала, но мне нужно использовать Красноречивый.

Большое спасибо!

+0

Вы можете оставить модель пользователя, как это в настоящее время? –

ответ

0

Это отношения многие ко многим, так что вам нужно belongsToMany.

// basic setup 
public function friends() 
{ 
    return $this->belongsToMany('User', 'friends', 'user_a', 'user_b') 
     ->withPivot('confirmed'); 
} 

Однако это еще не все, поскольку вы хотите, чтобы он был двунаправленным. Это означает, что вам нужно настроить 2 отношений - здесь вы можете найти точное решение для этого:

Friendship system with Laravel : Many to Many relationship

+0

Спасибо большое, спасли мой день. – bernadd

1

вы можете сформировать hasMany() отношения между пользователями и друзьями Таблица

В модели пользователя Вы должны написать

public function friends() { 
    return $this->hasMany('Friend','user_a'); 
} 

и при выборке данных из базы данных.

$user = User::with('friends')->find($userId); 

, используя загрузку, вы можете получить всех друзей пользователя в настоящий момент пользователя.

вот ссылка для отношений в Laravel

http://laravel.com/docs/eloquent#relationships

+0

Это именно то, что мне нужно, но могу ли я использовать в моей модели User this: return $ this-> hasMany ('Friend', 'user_a', 'user_b'); поскольку пользователь user_a или user_b может быть в настоящий момент зарегистрированным пользователем. Это верно? Таким образом, пользователь user_a или user_b может быть в настоящий момент зарегистрирован пользователем. – bernadd

+0

Это неправильно. Это не 'hasMany'. –

+0

@JarekTkaczyk - Спасибо, что привлекли его к моему вниманию. :) – justrohu

-1

Дайте этому попытку. Если вам нужно, вы хотите. Добавьте идентификаторы и электронные письма, если они вам понадобятся.

select u.username, f.status, uf.username as friendname 
from users u 
join friends f on 
    f.user_a = u.id or f.user_b = u.id 
join users uf on 
    uf.id = f.user_a or uf.id = f.user_b 
    and uf.id != u.id 
+0

OP утверждает, что он знает, как это сделать с SQL, но он должен иметь возможность сделать это с помощью Eloquent. –

+0

Я утверждал, что знаю, как это сделать в SQL, но мне нужно сделать это с помощью Eloquent. Спасибо за выстрел в любом случае. – bernadd