2014-12-06 7 views
0

Хорошо у меня есть эти три таблицыLaravel Eloquent: Whereor массив присоединяется

users table: 
id(int), name(varchar(20)), password(varchar(64)), created_at, updated_at 

friends table: 
id(int), targetID(int), ownerID(int), created_at, updated_at 

posts table: 
id(int), content(varchar(255)), ownerID(int), created_at, updated_at 

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

В этом случае, идент 1, который является Джон

Users table data 
1, John, xxxx, xxxx, xxxx 
2, Mary, xxxx, xxxx, xxxx 
3, Micheal, xxxx, xxxx, xxxx 
4, Rick, xxxx, xxxx, xxxx 
5, Sarah, xxxx, xxxx, xxxx 

Friends table data 
1, 2, 1, xxxx, xxxx 
1, 3, 1, xxxx, xxxx 
1, 4, 1, xxxx, xxxx 

Posts table data 
1, "Hi everyone", 1, xxxx, xxxx 
2, "Good Morning", 1, xxxx, xxxx 
3, "Welcome to our site", 2, xxxx, xxxx 
4, "Quite a few members", 3, xxxx, xxxx 
5, "haha", 5, xxxx, xxxx 

Как видно из приведенной выше ситуации, наш пользователь, Джон дружит с идентификатором 2,3,4, который Мэри, Мичил и Рик.

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

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

ответ

0

его хорошо, я нашел ответ, вот он для будущих реферистов.

$posts = Post::where('ownerID', function($query){ 
        $query->select('targetID') 
         ->from(with(new Friends)->getTable()) 
         ->where('ownerID', Auth::user()->id); 
       }) 
       ->orWhere('ownerID', Auth::user()->id) 
       ->join('users', 'users.id', '=', 'posts.ownerID') 
       ->orderBy('created_at', 'desc') 
       ->get(array('posts.id', 'posts.content', 'users.name', 'posts.created_at')); 
Смежные вопросы