2016-03-16 2 views
1

Моей схема базы данныхLaravel красноречивых Отношений Query

links: 
id  status  user_id  url 
    1   1   1   something 
    2   1   1   something 
    3   1   1   something 

links_type: 
id   link_id  links_type 
    1   1   external 
    2   1   external 
    3   1   internal 
    4   1   external 
    5   2   internal 
    6   2   external 
    7   2   internal 
    8   2   external 

я хочу взять данные все звенья, статус 1 и user_id является 1 и подсчет внешних и внутренних связей и которые внешним отсчетом> 2.

используя laravel 5.2 красноречивый.

Результат должен быть, как это из данных, приведенных

id  status user_id  url  external_links  internal_links 
    1  1  1  something   3     1 
+0

как 'являются link' и Сопутствующие' link_types'? У меня есть fk, чтобы связать 'link' с' link_types'? – nextt1

+0

yes link_id - это внешний ключ, связанный со ссылками –

+0

, ваш ответ работает отлично. @ nextt1 thankyou –

ответ

1

Просто определить эти отношения в Link модели

public function link_type() 
{ 
    return $this->hasMany('App\linkType'); 

} 

и использовать этот запрос

Link::where('status','=','1')->where('user_id','=','1')->has('link_type','>', '2')->with('link_type')->get(); 
0

Если у вас уже есть правильные миграции с Ф.К.-х и модели следующий код должен работать:

$links = Link::where('status','=','1')->where('user_id','=','1') ->whereHas('links_type',function ($query) { $query->whereNotIn('external_count', [0,1]); })->get();

Вероятно, следует добавить с ('links_type') для eager_loading (проблема N + 1):

$links = Link::with('links_type')->where('status','=','1')->where('user_id','=','1') ->whereHas('links_type',function ($query) { $query->whereNotIn('external_count', [0,1]); })->get();

0

возможно это может работать.

, прежде чем вы должны создать hasMany соотношение для Link и имя как типа

$links = Link::where('status', 1) 
    ->wherer('user_id', 1) 
    ->whereHas('type', function($query) { 
     $query->where(
      $query->where('links_type', 'external')->count(), '>', 2 
     ); 
    }) 
    ->get(); 
Смежные вопросы