I want to send a language id value that is valid only in the joined table.
$sql = new Sql($this->adapter);
$select = $sql->select();
$select->from('users');
$select->columns([
'user_id',
]);
$select->join(['s' => 'specifications'], 'u.client_id = s.client_id AND u.user_id = s.consultant_id',
['specification_id'], $select::JOIN_LEFT);
$select->join(['sl' => 'specifications_lang'],
's.client_id = sl.client_id AND s.specification_id = sl.specification_id AND sl.lang_id = ?',
$select::JOIN_LEFT
);
$statement = $sql->prepareStatementForSqlObject($select);
$resultSet = $statement->execute(['en']);
But quote identifiers not allow to send values into join clause.
SELECT `users`.`user_id` AS `user_id`, `s`.`specification_id` AS `specification_id`, `sl`.`left` AS `left` FROM `users` LEFT JOIN `specifications` AS `s` ON `u`.`client_id` = `s`.`client_id` AND `u`.`user_id` = `s`.`consultant_id` INNER JOIN `specifications_lang` AS `sl` ON `s`.`client_id` = `sl`.`client_id` AND `s`.`specification_id` = `sl`.`specification_id` AND `sl`.`lang_id` = `?`