Выборка записей с одной таблицы по условию с друго

Добрый день. Расширяю компонент modExtra и столкнулся с Поиском по таблицам, а именно поиск по второй таблице, а вывод информации с первой (двухтабличный запрос(или как-то так)). Сейчас поиск работает по одной таблице(ту которую мы смотрим) но по мимо этого в некоторых таблицах мне нужен поиск с другой таблицы.

Вот SQL запрос который поидее должен выводить такой поиск

SELECT * 
FROM  `modx_driverlicense_licenses` 
WHERE  `names` = (  SELECT  `id` 
                                 FROM  `modx_driverlicense_notface` 
                                 WHERE  `modx_driverlicense_notface`.`name` LIKE  '%Коломи%' )

Но не могу понять как его внедрить в php код. Сейчас работает однотабличный поиск таким образом
public function prepareQueryBeforeCount(xPDOQuery $c) {
        $query = $this->getProperty('query');

        if (!empty($query)) {
            $c->andCondition(array(
                'number:LIKE' => '%'.$query.'%'
            ));
        }
        return $c;
    }
Как его «усовершенствовать» до двухтабличного запроса?
Pavel
27 мая 2015, 13:49
modx.pro
1
1 407
0

Комментарии: 5

Сергей Шлоков
28 мая 2015, 08:53
0
Легким движением руки брюки превращаются…
public function prepareQueryBeforeCount(xPDOQuery $c) {
	$query = $this->getProperty('query');
	if (!empty($query)) {
		// Нужно вставить название своего объекта второй таблицы
		$q = $modx->newQuery('YourClassObject');
		$q->select('id');
		$q->where(array('name:LIKE' => '%'.$query.'%'));
		$ids = array();
		while($row = $q->fetch(PDO::FETCH_ASSOC)) {
			$ids[] = $row['id'];
		}		
		if (!empty($ids)) {
			$c->where(array(
				'name:IN' => $ids
			));
		}
	}
	return $c;
}
    Pavel
    28 мая 2015, 09:06
    0
    ем…
    Call to a member function newQuery() on a non-object in
    вставил
    $q = $modx->newQuery('DriverLicenseNotface');
      Сергей Шлоков
      28 мая 2015, 09:29
      0
      Ну да, нужно так
      $q = $this->modx->newQuery('DriverLicenseNotface');
        Сергей Шлоков
        28 мая 2015, 12:41
        +1
        Ну и…

        П.С. Ребята, вы когда просите помощи, обратную связь не выключайте. Реагируйте как-то.
        Ведь желание помогать обратно пропорционально вашей вежливости.
          Pavel
          28 мая 2015, 15:18
          0
          Согласен на все 100%

          вот код самого класса
          class DriverLicenseLicensesGetListProcessor extends modObjectGetListProcessor {
          	public $objectType = 'DriverLicenseLicenses';
          	public $classKey = 'DriverLicenseLicenses';
          	public $defaultSortField = 'id';
          	public $defaultSortDirection = 'DESC';
          	
          	
          	public function prepareQueryBeforeCount(xPDOQuery $c) {
                  $query = $this->getProperty('query');
                  
                  $c->where(array(
                      'deleted' => 0,
                      ));
                  
                  if (!empty($query)) {
                      /*$c->andCondition(array(
                          'number:LIKE' => '%'.$query.'%',
                          'names:OR' => "SELECT  'id' 
                                           FROM  `modx_driverlicense_notface` 
                                           WHERE  `modx_driverlicense_notface`.`name` LIKE  '%".$query."%'"
                      ));*/
                      // Нужно вставить название своего объекта второй таблицы
              		$q = $this->$modx->newQuery('DriverLicenseNotface');
              		$q->select('id');
              		$q->where(array('name:LIKE' => '%'.$query.'%'));
              		$ids = array();
              		while($row = $q->fetch(PDO::FETCH_ASSOC)) {
              			$ids[] = $row['id'];
              		}		
              		if (!empty($ids)) {
              			$c->where(array(
              				'name:IN' => $ids
              			));
              		}
                  }
                  return $c;
              }
          	
          	
          }

          Cannot access empty property in  line 28
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5