src/Data/Tools/BizDataObj_Assoc.php
private static function _removeRecordMtoM($dataObj, $recArr)
    {
        // delete a record on XTable
        $db = $dataObj->getDBConnection();

        //TODO: delete using XDataObj if XDataObj is defined

        $where = $dataObj->association["XColumn1"] . "='" . $dataObj->association["FieldRefVal"] . "'";
        $where .= " AND " . $dataObj->association["XColumn2"] . "='" . $recArr["Id"] . "'";
        $sql = "DELETE FROM " . $dataObj->association["XTable"] . " WHERE " . $where;

        try {
            Openbizx::$app->getLog()->log(LOG_DEBUG, "DATAOBJ", "Associate Delete Sql = $sql");
            $db->query($sql);
        } catch (Exception $e) {
            Openbizx::$app->getLog()->log(LOG_ERR, "DATAOBJ", "Query Error: " . $e->getMessage());
            throw new Openbizx\Data\Exception("Query Error: " . $e->getMessage());
            return false;
        }
        return true;
    }
private static function _removeRecordMtoM($dataObj, $recArr)
    {
        // delete a record on XTable
        $db = $dataObj->getDBConnection();

        //TODO: delete using XDataObj if XDataObj is defined

        $where = $dataObj->association["XColumn1"] . "='" . $dataObj->association["FieldRefVal"] . "'";
        $where .= " AND " . $dataObj->association["XColumn2"] . "='" . $recArr["Id"] . "'";
        $sql = "DELETE FROM " . $dataObj->association["XTable"] . " WHERE " . $where;

        try {
            Openbizx::$app->getLog()->log(LOG_DEBUG, "DATAOBJ", "Associate Delete Sql = $sql");
            $db->query($sql);
        } catch (Exception $e) {
            Openbizx::$app->getLog()->log(LOG_ERR, "DATAOBJ", "Query Error: " . $e->getMessage());
            throw new Openbizx\Data\Exception("Query Error: " . $e->getMessage());
            return false;
        }
        return true;
    }
Remove record many to many

@param BizDataObj $dataObj
@param array $recArr
@return boolean