У меня есть структура таблицы, как показано ниже:
Brands => BrandUser <= Users
Мне нужно получить бренды, которые имеют соответствующую запись в таблице BrandUser, и те, которые не имеют соответствующей записи в таблице BrandUser …
Я пробовал следующий запрос:
public function getUserBrands($userId) { $select = new Select(); $select->from(array('bu' => $this->table)); $select->join(array('b' => 'brands'), 'bu.brandId = b.id', array('id','name')); $select->join(array('u' => 'users'), 'u.id = bu.userId', array('id','username'),Select::JOIN_LEFT); $where = new Where(); $where->equalTo("bu.userId",$userId); $select->where($where); return $this->branduserTable->selectWith($select)->toArray(); }
Но я получаю только тех пользователей, которые имеют соответствующую запись в таблице BrandUser … Мне нужно получить остальные бренды, которые не имеют соответствующего значения в BrandUser … Как я могу это сделать?
Имейте в виду, я не знаком с Zend-Framework, поэтому вам, возможно, придется немного адаптировать это. Но вам нужно использовать Brands
в качестве первичной / первой таблицы, чтобы сначала получить все записи этой таблицы, а затем сопоставить ее с остальными таблицами.
public function getUserBrands($userId) { $select = new Select(); $select->from(array('b' => 'brands')); $select->join(array('bu' => $this->table), 'bu.brandId = b.id', array('id','name'),Select::JOIN_LEFT); $select->join(array('u' => 'users'), 'u.id = bu.userId', array('id','username'),Select::JOIN_LEFT); $where = new Where(); $where->equalTo("bu.userId",$userId); $select->where($where); return $this->branduserTable->selectWith($select)->toArray(); }