2017-01-30 1 views
1

У меня есть две модели:Laravel имеет много отношения сложный запрос

сообщения

class posts extends Eloquent 
{ 
public $timestamps = false; 
protected $table = 'links'; 

public function commented() 
{ 
    return $this->hasMany('App\Models\comments','post_id')->where('reply',true); 
} 
} 

комментарии

class comments extends Eloquent 
{ 
public $timestamps = false; 
protected $table = 'comments'; 
} 

и данные в таблицах так:

разместить данные

{ 
    "_id" : ObjectId("58837a559caf2fc968adc64d"), 
    "post_title" :'xyz' 
} 
{ 
"_id" : ObjectId("58837a559c6as77777as"), 
"post_title" :'abc' 
} 

Комментарии данных

{ 
    "_id" : ObjectId("58837a559caf2fa6a8s0v0z"), 
    "post_id" :'58837a559caf2fc968adc64d' 
    "reply":true, 
    "comment":'1st comment' 
} 
{ 
"_id" : ObjectId("58837a55z7asd09zx865v9"), 
"post_id" :'58837a559c6as77777as', 
"reply":false, 
"comment":'comment' 
} 
{ 
    "_id" : ObjectId("58837a559caf2fa6a8s0v0z"), 
    "post_id" :'58837a559caf2fc968adc64d' 
    "reply":true, 
    "comment":'2nd comment' 
    } 

Теперь я хочу, чтобы все сообщения, которые содержат количество комментариев (которые отвечать = истина) больше чем 0. Спасибо.

ответ

1

Обновление ответа Алексея Мезенина.

Post::has('commented')->whereHas('comments', function($query) { 
    $query->where('reply', '=', true); 
})->get(); 
0

Используйте has() метод:

Post::has('commented')->get(); 

Это позволит получить все сообщения, которые имеют по крайней мере один commented отношения.

+0

благодаря @Alexey Мезенину. , но я хочу получить только те комментарии, ответы на которые верны. –

0

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

$posts = Post::get() 
$array = ''; 
foreach ($posts as $post) { 
     if ($post->commented->reply == True) { 
      $record = $post; 
       $array[] = $record; 
      } 
} 
return $array;