2013-08-08 5 views
0

У меня есть эти отношения в моей Местоположение модели:Вложенный запрос с красноречивы

public function special_users() { 
    return $this->users() 
    ->where('type_id', '=', '2') 
    ->orWhere('type_id', '=', 'null'); 
} 

Но я хочу есть пользователей, где type_id = 2 и пользователей, где type_id = нуль, только если нет пользователя для этого месте, где type_id = 2.

Возможно ли это?

+0

Все еще ищут решение. , , –

ответ

0

Ваш вопрос о СУБД; не о Ларавеле.

Обычно эти типы запросов выполняются Запрашивание TYPE_ID = 2. Если записи не найдены, просто стрелять второй запрос, где вы запрашиваете type_id = 0.

+0

Спасибо R. Ваше предложение не работает, потому что будут найдены записи для пользователей, где их type_id = 2. Мне нужно найти пользователей для type_id = 0 (null) ТОЛЬКО, если не найдено ни одного для этого конкретного пользователя с type_id = 2 , Я уверен, что это потому, что я не объяснил проблему должным образом. Больше не волнуйтесь и спасибо. –

0

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

class Location extends Eloquent { 
    protected $table = 'locations'; 

    public function users() { 
     return $this->belongsToMany('User')->withTimestamps()->withPivot(['type_id']); 
    } 

    public function chef_users() { 
     return $this->users()->where('type_id', '2'); 
    } 
} 

class DishController extends BaseController { 
    $chef_locations = Location::with('chef_users')->get(); 
    foreach ($chef_locations as $cl) { 
     foreach ($cl->chef_users as $cu) { 
      $chef_user_ids[] = $cu->id; 
     } 
    } 

    $locations = Location::with(
     array('users' => function($lu_query) use($chef_user_ids) { 
      $lu_query->where('type_id', '2'); 
      $lu_query->orWhere(function($nested_query) use($chef_user_ids) { 
       $nested_query->whereNull('type_id'); 
       $nested_query->whereNotIn('user_id', $chef_user_ids); 
      }); 
     }) 
    ) 
} 
Смежные вопросы